我一直在試圖找到一個問題的來源現在幾個小時,並且我開始認爲我的bug受到影響從觀察者的效果!(jQuery)點擊事件有時不附加到它的元素 - 似乎與開發者工具被打開
總結:
- 有複選框,我的網頁上
- 一旦整個頁面加載完成後,附加一個偵聽每個複選框
var myModule = (function() {
var myFunction = function() {
console.log("Do something");
}
var setUpTogglers = function() {
var dict = {
"#checkbox1": "div.div1",
"#checkbox2": "div.div2"
};
$.each(dict, function(i, elem) {
var toggler = $(i);
var fader = $(dict[i]);
toggler.on('click', function() {
myFunction(fader);
});
});
};
return {
init: function() {
setUpTogglers();
}
};
})();
$(window).on("load", function() {
myModule.init();
});
這是一個非常直接的佛rward任務(或者我認爲,無論如何)。我的問題來自於僅在某些時間被監聽的點擊事件。
這裏是它不工作的情況下:
- 瀏覽過該網站的頁面複選框
- 與開發工具檢查複選框元素
- 檢查「事件監聽器」標籤
- 我下點擊根
這裏不會出現元素的情況下它的工作
- 開放開發工具
- 瀏覽過該網站的頁面複選框
- 檢查「事件監聽器」選項卡
- 我的元素並下點擊根
我出現我以各種方式對其進行了多次測試。我已經使用開發工具打開並加載/刷新了頁面,並且沒有偵聽器;我用CTRL-F5刷新了頁面(開發工具沒有打開)並且有一個監聽器;我在偵聽器被連接的地方設置了一個斷點,有時候偵聽器被連接,有時它不會。
但是,在我過去一小時所做的所有測試中,當頁面已加載或打開時,「開發工具」窗口刷新後,監聽器已連接。這導致我相信這是某種加載順序問題?我真的不知道該在哪裏開始調試。如果有人有任何建議,將非常感激。
tldr: 事件監聽器越來越重視到複選框時開發工具是開放的,但並不總是越來越重視,否則。發生這種情況的原因是什麼?
注:我使用谷歌瀏覽器
非常感謝。我會嘗試一些類似的東西,並讓你知道它是否有效。 – pickle
大聲笑也因爲你是硬編碼詞典爲什麼不廢止所有的代碼,只是綁定事件到你想要直接的div? $(''#checkbox1).on('click',function(){myFunction(「div.div1」);}); $(''#checkbox2).on('click',function(){myFunction 「div.div2」);}); hehe如果你只是綁定這麼幾個項目,爲什麼你需要這個代碼? – Harry
我只給了幾個項目用於這個問題的目的。有兩個以上的鍵值對。它是通過迭代設置的,以避免代碼重複。 – pickle