0

我有一个与此类似的问题,但是有一个重要的区别。接受的答案中提供的方法适用于“直接”绑定事件。delegate如果为处理程序分配了该方法,则它不会产生结果。例如:

$("#some-element").delegate(".some-class", "click", function () {
  alert("Click!");
});

在生成具有类some-class的元素并将其插入到 html 之后,有没有办法测试click事件处理程序是否已绑定到它们?

编辑:根据@Pointy 的评论,我将更正上面的问题,因为处理程序不会被绑定到.some-class

有没有办法检查一个元素,例如,由一个 jQuery 对象表示(在这个例子中它可能是$(".some-class")),如果单击,是否会触发处理程序?

4

1 回答 1

1

正如Pointy所指出的,事件冒泡了,并且有一个“主”事件处理程序绑定到根元素,它检查最初收到点击的元素是否具有您提供的类,如果有,您的回调将被调用。

所以要检查你的回调是否会在元素上被调用,你所要做的就是检查元素是否在选择器提供的列表中$("#some-element .some-class");

所以这样的事情应该可以工作(尚未测试):

var testEl = elementYouWantToTestAgainst;
if ($("#some-element .some-class").is(testEl)) {
    //It is "bound"
}

或另一种解决方案,它做同样的事情;

//Which should do something like this:  
var els = $("#some-element .some-class");
els.each(function() {
    if (this === testEl) {
        //It is "bound"
    }
});

至于调试事件,我通常只是添加console.log("Event fubar fired!");到处理程序中。

于 2012-02-01T14:14:13.903 回答