Javascript 检查事件是否已处理
如何检查jquery中是否使用.on处理事件?Javascript 检查事件是否已处理,javascript,jquery,Javascript,Jquery,如何检查jquery中是否使用.on处理事件? 例如,我向按钮单击事件添加了一个事件处理程序: $(document).on("click", "#button", function(event) { alert("Handled buttonclick event!"); }); 现在我想检查是否已处理该事件以防止再次分配相同的事件处理程序。如果要添加按钮,请仅单击一次 或手动您可以通过设置a变量进行检查 var countClicked=0; $(document).on("cl
例如,我向按钮单击事件添加了一个事件处理程序:
$(document).on("click", "#button", function(event) {
alert("Handled buttonclick event!");
});
现在我想检查是否已处理该事件以防止再次分配相同的事件处理程序。如果要添加按钮,请仅单击一次
或手动
您可以通过设置
a变量
进行检查
var countClicked=0;
$(document).on("click", "#button", function(event) {
alert("You clicked button "+ (++countClicked) + " times");
});
由于您正在委托给文档,因此需要检查文档的事件处理程序
$._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
});
每个对象将包含以下内容
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
或
如果您看到2个警报,它被处理了2次不太清楚您的意思,您能解释更多吗?可能重复:这是一个委托事件处理程序。第二次添加它是没有意义的。在任何情况下,您都可以
$(document).data('handler-added',true)
来“记住”您所做的。@Barmar它应该可以正常工作-这是因为事件处理程序绑定到文档,所以您需要检查文档对象-。one()
使处理程序只运行一次,这并不意味着只有一个处理程序。并且v.handler
包含相关的处理程序函数。
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!");
});