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

发布于 2024-11-09 13:45:00 字数 538 浏览 0 评论 0原文

我有这个链接:

<%= 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

为什么会这样以及如何修复它?

I have this link:

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

which outputs this html:

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

and I have this JQuery function:

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

but when I click on the link, I get this error:

Uncaught ReferenceError: remove_fields is not defined

Why is this and how do I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

慵挽 2024-11-16 13:45:00

如果您的函数声明如下:

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 范围内以编程方式附加单击处理程序。

If you have your function declaration like this:

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

then it's only in scope inside the jQuery(function () { }) function and not visible from outside. Two methods of resolving this:

var remove_fields;

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

Declares a globally accessible variable and makes it a function as usual.

Better though:

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

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

Attach the click handler programmatically from within your jQuery scope.

耀眼的星火 2024-11-16 13:45:00

您不应该使用 onclick 属性,这是一种不好的做法,而且是 90 年代的事情。相反,您应该为锚点添加一个类,并使用 jQuery 将处理程序绑定到单击事件。

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();
    });
});

You should not use the onclick attribute, it's a bad practice and something that belongs back in the 90s. Instead you should add a class for your anchors and bind a handler to the click event with jQuery.

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();
    });
});
自找没趣 2024-11-16 13:45:00

可能很明显,但是 javascript 是否链接在 html 源代码的 head 中?

May be obvious, but is the javascript linked in the head in the source of the html?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文