2017-04-13 53 views
0

我需要在事件对象中识别文档上的特定事件。例如文档事件ID

$(document).click(function() { 
     console.log(1) 
}); 

$(document).click(function() { 
     console.log(2) 
}); 

var events = $._data(document, "events"); 
console.log(events); 

enter image description here

当我记录所有的“点击”事件,也有它没有什么区别:

我怎么能定制ID添加到每个事件?也许我可以使用命名空间或者我可以更改guid

我需要检查:“是否存在特定事件?”

+1

什么会事件“存在”是什么意思?如果你使用这个你想写的信息显示代码,这将会有所帮助。 –

+2

这听起来像是一个XY问题。为什么你需要这样做? –

+0

我有一个脚本挂起了一个单击事件。并且在我需要检查这个事件后是否存在 –

回答

2

可以绑定并传递参数给回调监听器来识别类型

$(document).click(function (type) { 
     console.log(type) 
}.bind(this,"i-am-click")); 

$(document).click(function (type) { 
     console.log(type) 
}.bind(this,"i-am-another-click")); 

var events = $._data(document, "events"); 
console.log(events); 

UPDATE

确定具体的事件对象在你的事件数组,你可以做下面的技巧。

$(document).click(
    (function(){ 
     var fn = function(){ // Your callback function 
         console.log('i-am-click'); 
       }; 

     fn.event_id=1; // Adding id to the callback. 

     return fn; // returning the function after adding id 
    })() 
); 

$(document).click(
    (function(){ 
     var fn = function(){ // Your callback function 
         console.log('i-am-another-click'); 
       }; 

     fn.event_id=2; // Adding id to the callback. 

     return fn; // returning the callback function after adding id 
    })() 
); 

var events = $._data(document, "events"); 

// Find the events in the event array using filter 

// This will return an array of match event with id in events array 
events.click.filter(function(ev){return ev.handler.event_id==1;}); // event id you are looking for 
+0

感谢您的回复。但我如何使用它来检查是否存在“我是单击”事件? '$ .each(events,function(i,val){ if(...)... });' –

+0

是的,我想知道**“我是另一个点击” **事件处理程序已注册。对不起我的英语不好)。 –

+0

检查更新是否适用于您。 :) –

1

你澄清说:

我想知道[如果] ...事件处理程序已注册

使用标志:

var handlersRegistered = {}; 
$(document).click(function() { 
    console.log("a"); 
}); 
handlersRegistered["a"] = true; 

$(document).click(function() { 
    console.log("b"); 
}); 
handlersRegistered["b"] = true; 

如果在某些时候您需要知道处理程序“a”是否已注册:

if (handlersRegistered["a"]) { 
    // Yes it is 
} else { 
    // No, it isn't 
} 

没有必要在jQuery的内部去瞎搞。

(我使用handlersRegistered["a"]而不是handlersRegistered.a在要使用这些无效的标识标签情况。)

+0

我的事件注册和变量分配没有任何连接。如果这个事件的处理者有可能不会被注册,那么这个决定是不正确的。 –

+0

@ FeR-S:在上面,它们是绝对相关的:当handlersRegistered [“a”] = true;'被执行时,“a”处理程序**被**注册。当“a”处理程序被注册时,**发生的下一件事**(不能被中断)是'handlersRegistered [“a”] = true;'被执行。 –

+0

但是,如果我将检查它在变量'handlersRegistered'不存在的文档的位置吗? –