检查是否处理了事件

时间:2013-09-13 15:19:20

标签: javascript jquery

如果在jquery中使用.on处理事件,我如何检查?
例如,我在按钮点击事件中添加了一个事件处理程序:

$(document).on("click", "#button", function(event)  {
    alert("Handled buttonclick event!");
});

现在我想检查是否处理了事件以防止第二次分配相同的事件处理程序。

2 个答案:

答案 0 :(得分:0)

如果您想add a button click once only,可以使用one()

$("#button").one("click",function(event)  {
    alert("Handled buttonclick event!");
});

or manually您可以settingvariable类似

进行检查
var countClicked=0;
$(document).on("click", "#button", function(event)  {
    alert("You clicked button "+ (++countClicked) + " times");
});

答案 1 :(得分:0)

由于您要委托文档 - 您需要检查文档的事件处理程序

$._data(document,'events') // will return all event handlers bound to the document

然后你可以检查你想要的事件......例如点击

var events = $._data(document,'events').click; // all click events

$.each(events,function(i,v){ // loop through
    v.selector; // will give you all the selectors used in each delegated event
});

http://jsfiddle.net/B7zS6/

每个对象将包含以下内容

Object {type: "click", origType: "click", data: undefined, handler: function, guid: 2…}
data: undefined
guid: 2
handler: function (event) {
namespace: ""
needsContext: false
origType: "click"
selector: "#button"
type: "click"
__proto__: Object

这假设您的委托事件已绑定到文档对象。所以在这种情况下,你“必须”知道事件处理程序实际绑定到哪个元素。其他答案可能会更好地工作

所以这个方法不会知道

$('body').on("click", "#button", function(event)  {
    alert("Handled buttonclick event!");
});

$('parentelement').on("click", "#button", function(event)  {
    alert("Handled buttonclick event!");
});