这就是我的问题:有没有可能检查是否存在动态附加的事件侦听器?或者我如何检查"onclick“的状态(?)DOM中的属性?我已经像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 is here。如果您单击"Add onclick for 2",然后单击"link 2“,事件会触发良好,但"Test link 2”总是报告false。有人能帮帮忙吗?
发布于 2012-07-12 23:58:14
没有办法检查动态附加的事件侦听器是否存在。
查看是否附加了事件侦听器的唯一方法是像这样附加事件侦听器:
elem.onclick = function () { console.log (1) }然后,您可以通过返回!!elem.onclick (或类似的内容)来测试事件侦听器是否附加到了onclick。
发布于 2017-11-16 20:56:25
我做了这样的事情:
const element = document.getElementById('div');
if (element.getAttribute('listener') !== 'true') {
element.addEventListener('click', function (e) {
const elementClicked = e.target;
elementClicked.setAttribute('listener', 'true');
console.log('event has been attached');
});
}在附加侦听器时为元素创建特殊属性,然后检查该属性是否存在。
发布于 2013-01-17 02:10:37
我要做的是在你的函数之外创建一个布尔值,它从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);
}
}https://stackoverflow.com/questions/11455515
复制相似问题