2017-04-13 52 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'不存在的文檔的位置嗎? –