我的问题是:是否可以检查动态附加事件监听器是否存在?或者如何检查 DOM 中 "onclick" (?)属性的状态?我在网上搜索了很多解决方案,比如 Stack Overflow,但都没有找到。下面是我的 HTML:
<a id="link1" onclick="linkclick(event)"> link 1 </a>
<a id="link2"> link 2 </a> <!-- without inline onclick handler -->
然后,我在 Javascript 中为第二个链接附加了动态创建的事件监听器:
document.getElementById('link2').addEventListener('click', linkclick, false);
代码运行良好,但我试图检测附加监听器的所有尝试都失败了:
// test for #link2 - dynamically created eventlistener
alert(elem.onclick); // null
alert(elem.hasAttribute('onclick')); // false
alert(elem.click); // function click(){[native code]} // btw, what's this?
[jsFiddle在此](
)。 如果点击 "Add onclick for 2",然后点击 "[链接 2]",事件会顺利触发、 但 "Test link 2" 总是报错。 谁能帮帮我?我的做法是在函数外创建一个布尔值,开始时为 FALSE,当您附加事件时将其设置为 TRUE。在再次附加事件之前,这将作为某种标记。下面是这个想法的一个示例。
// initial load
var attached = false;
// this will only execute code once
doSomething = function() {
if (!attached) {
attached = true;
//code
}
}
//attach your function with change event
window.onload = function() {
var txtbox = document.getElementById("textboxID");
if(window.addEventListener){
txtbox.addEventListener("change", doSomething, false);
} else if(window.attachEvent){
txtbox.attachEvent("onchange", doSomething);
}
}
下面是我用来检查是否存在动态附加事件监听器的脚本。我使用 jQuery 将事件处理程序附加到元素上,然后触发该事件(本例中为点击事件)。这样,我就可以检索和捕获只有在附加了事件处理程序时才会存在的事件属性。
var eventHandlerType;
$('#contentDiv').on('click', clickEventHandler).triggerHandler('click');
function clickEventHandler(e) {
eventHandlerType = e.type;
}
if (eventHandlerType === 'click') {
console.log('EventHandler "click" has been applied');
}