开发页面以测试事件在浏览器中的触发方式。我正在尝试创建一个脚本,该脚本将事件类型记录为目标 div 上发生的事件,而不管事件类型如何。为此,我编写了首先查找窗口支持的所有事件类型的代码。这是基于在此处找到的代码。
然后它尝试将所有这些事件附加到目标 div。这里命名为“testbed”,因为 console.log(i) 一直计数为零,我认为句柄都已成功添加。因此我假设我还没有找到添加函数回调的最佳方法
当我在谷歌浏览器中加载这个页面时,我看到一个大的红色 div。控制台首先正确显示事件列表,包括“onclick”控制台从 70 到 0 的计数表示添加了 70 个事件。它最终声明添加的所有事件。当我单击 div 时,控制台中没有进一步注册。
所以问题是,如果函数logType
被传递给setEventListeners
哪个函数又将它传递给个人addEventListener
,并且这应用于每个事件类型,为什么单击有问题的 div 不会导致任何日志到控制台?
完整代码如下
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
#testbed {
width: 100%;
height: 200px;
background: red;
}
</style>
</head>
<body>
<div id='testbed'>
</div>
<script>
var myApp = {
init: function () {
this.getSupportedOccurances(window);
var testbed = document.getElementById('testbed');
this.setEventListeners(testbed, this.occurances, this.logType);
},
occurances: [],
getSupportedOccurances: function (target) {
var i = '', occurances = this.occurances;
for (i in target) {
if ( /^on/.test(i)) { occurances[occurances.length] = i; }
}
console.log(occurances);
},
setEventListeners: function(target, eventList, callback) {
var i = eventList.length-1;
if (i > -1) {
console.log('adding');
do {
console.log(i);
target.addEventListener(eventList[i], callback);
}
while (--i >=0);
}
console.log('Event Listeners added');
},
logType: function (event) {
console.log(event.type);
}
}
myApp.init();
</script>
</body>