为什么我的应用告诉我我的方法未定义?

时间:2011-05-23 07:18:48

标签: javascript jquery html debugging

我有这个链接:

<%= link_to_function "remove", "remove_fields(this)"%>

输出这个html:

<a href="#" onclick="remove_fields(this); return false;">remove</a>

我有这个JQuery函数:

    function remove_fields(link){
      $(link).prev("input[type=hidden]").val("1");
      $(link).closest(".fields").hide();
    }

但是当我点击链接时,我收到此错误:

Uncaught ReferenceError: remove_fields is not defined

为什么会这样,我该如何解决?

3 个答案:

答案 0 :(得分:2)

如果你有这样的功能声明:

jQuery(function ($) {
    function remove_fields ...
});

然后它只在jQuery(function () { })函数内的范围内,并且从外部看不到。解决这个问题的两种方法:

var remove_fields;

jQuery(function ($) {
    remove_fields = function () { ... }
});

声明一个全局可访问的变量并使其像往常一样运行。

但更好:

jQuery(function ($) {
    function remove_fields ...

    $('a.some-class').click(remove_fields);
});

从jQuery范围内以编程方式附加click处理程序。

答案 1 :(得分:1)

你不应该使用onclick属性,这是一种不好的做法,属于90年代的东西。相反,你应该为你的锚添加一个类,并使用jQuery将处理程序绑定到click事件。

<强> HTML

<a class="remove-fields" href="#">remove</a>

<强>的JavaScript

// This is a shorthand for document.ready
$(function(){
    // Bind handler to click event
    $("a.remove-fields").click(function(e){
        var $this = $(this);
        $this.prev("input[type=hidden]").val("1");
        $this.closest(".fields").hide();
        // Prevent default behavior
        e.preventDefault();
    });
});

答案 2 :(得分:0)

可能是显而易见的,但是在html的源头中链接的是javascript吗?