我有类似this one的问题,但有一个重要的区别。接受的答案中提供的方法适用于“直接”绑定事件。如果为处理程序分配了delegate
方法,则不会产生结果。例如:
$("#some-element").delegate(".some-class", "click", function () {
alert("Click!");
});
生成具有类some-class
的元素并将其插入到html中后,是否有办法测试click
事件处理程序是否已绑定到它们?
编辑:根据@Pointy的评论,我将更正上述问题,因为处理程序不会绑定到.some-class
:
有没有办法检查一个元素,例如,由jQuery对象表示(在本例中它可能是$(".some-class")
),如果单击,会触发处理程序吗?
答案 0 :(得分:1)
正如Pointy指出的那样,事件起泡了,而且还有单一的" master"绑定到根元素的事件处理程序,它检查最初收到点击的元素是否具有您提供的类,如果是,则调用您的回调。
因此,要检查是否要在元素上调用回调,您只需要检查元素是否在选择器$("#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!");
。