我在嘗試註冊和觸發jQuery中的事件時遇到了一個奇怪的問題。我的示例代碼存根是這樣的:在jQuery觸發器上調用不正確的處理程序
events = {"changeMode": ["mode1"], "changeKeymap": ["keymap1"]}
for(var event in events) {
var listeners = events[event];
for (i=0; i<listeners.length; i++)
{
var listn = listeners[i]
console.log("Activate listener", listn, " For event: ", event);
$("#testing").on(event, function(e, d) {
console.log("Event: ", event);
console.log("Listener invoked is: ", listn);
console.log("Event which is passed is: ", e);
console.log("Data is: ", d);
});
}
}
$("#testing").trigger("changeMode", "random data");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="testing"></div>
正如你所看到的,而我試圖調用「changeMode」,即實際上得到調用是「changeKeymap」監聽器。實際上,調用的監聽器是最後一個被定義的監聽器,所以我假設它以某種方式覆蓋了其他監聽器。 (我實際上有更大的代碼,但基本上這就是我遇到的錯誤歸結爲什麼)任何人都可以提出發生了什麼事。
這裏的jsfiddle:https://jsfiddle.net/7xyyggz8/
編輯:
事件發射是正確的喬爾的建議。然而,響應這個調用的監聽器在某種程度上是不正確的。
編輯2:
更新小提琴和代碼,使用瓦爾..仍然遇到了同樣的問題
您有一個'
'元素並且正在重複循環該單個元素。這就是之前聽衆被覆蓋的原因。 – grgdne@grgdne:他們不會被覆蓋,他們堆疊。 –
@JoelEtherton thx! – grgdne