jQuery Delegate没有像我想要的那样绑定

时间:2012-07-03 08:36:09

标签: delegates jquery

使用jQuery 1.7

我无法将Click事件绑定到某些动态加载的内容。

我环顾四周,尝试了.live.delegate.on,而我却无法让它发挥作用。

这是我的代码:

$(".fileexplorer_folderdlg").delegate(".delete", "click", function () {
        console.log("Hello world!");
    });

问题是, .fileexplorer_folderdlg 是动态加载的。如果我使用 .fileexplorer (非动态加载),它可以工作,但我有更多的元素与 .delete 类,我不希望绑定到(并且没有元素可以出于各种原因重命名或更改类。)

我也尝试使用 .fileexplorer_folderdlg .delete 作为.delegate选择器,也没有用!

当然我可以为我想要绑定的元素添加另一个唯一的类,但这确实应该有效,对吧?

1 个答案:

答案 0 :(得分:2)

我相信这会奏效:

$(document).on('click', '.delete', function() {
    if ($(this).closest('.fileexplorer_folderdlg').length) {
         console.log('hello, world!');
    }
});

甚至只是:

$(document).on('click', '.fileexplorer_folderdlg .delete', function() {
     console.log('hello, world!');
});

正如您所发现的那样,您无法绑定.fileexplorer_folderdlg,因为它是动态的。因此,您需要绑定一些静态元素,在将来的某个时刻包含该元素。

相反,这会绑定document(但不幸的是,此后每次单击文档都会触发)。

杰夫编辑

虽然上面的代码不起作用,但修改它有点完成了工作,虽然不是最理想的解决方案。

$(document).on('click', '.delete', function () {
        if($(this).closest(".fileexplorer") != null)
          console.log("Thanks for your help!");
    });

它可以工作,但是这个事件是针对所有其他.delete类触发的,其中有很多类。我不明白的是,为什么使用 .fileexplorer_folderdlg .delete 不起作用!