【发布时间】:2017-11-17 21:19:26
【问题描述】:
我已经尝试定位问题的根源已经几个小时了,我开始认为我的 bug 受到了观察者效应的影响!
总结:
- 我的页面上有复选框
- 整个页面加载完成后,为每个复选框附加一个监听器
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();
});
这是一个非常简单的任务(至少我是这么认为的)。我的问题是由于 click 事件只在某些时间被监听。
这是一个不起作用的情况:
- 通过网站导航到带有复选框的页面
- 使用开发者工具检查复选框元素
- 检查“事件侦听器”选项卡
- 我的元素没有出现在点击根目录下
这是一个确实有效的案例
- 打开开发者工具
- 通过站点导航到带有复选框的页面
- 检查“事件侦听器”选项卡
- 我的元素确实出现在点击根目录下
我已经以各种方式对其进行了多次测试。我已经加载/刷新了开发者工具打开的页面并且没有监听器;我已经用 CTRL-F5 刷新了页面(并且开发者工具没有打开)并且有一个监听器;我设置了一个断点,监听器被连接,有时监听器被连接,有时它没有。
然而,在我过去一小时所做的所有测试中,当页面加载或刷新并打开开发者工具窗口时,侦听器已被附加。这让我相信这是某种加载顺序问题?我真的不知道从哪里开始调试这个。如果有人有任何建议,将不胜感激。
tldr: 当开发者工具打开时,事件侦听器会附加到复选框,但并非总是否则会附加。发生这种情况的一些原因可能是什么?
注意:我使用的是谷歌浏览器
【问题讨论】:
标签: jquery google-chrome onclicklistener addeventlistener developer-tools