首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查动态附加事件监听器是否存在?

如何检查动态附加事件监听器是否存在?
EN

Stack Overflow用户
提问于 2012-07-12 23:42:02
回答 20查看 241K关注 0票数 158

这就是我的问题:有没有可能检查是否存在动态附加的事件侦听器?或者我如何检查"onclick“的状态(?)DOM中的属性?我已经像Stack Overflow一样在互联网上搜索了一个解决方案,但没有运气。下面是我的html:

代码语言:javascript
运行
复制
<a id="link1" onclick="linkclick(event)"> link 1 </a>
<a id="link2"> link 2 </a> <!-- without inline onclick handler -->

然后在Javascript中,我将动态创建的事件侦听器附加到第二个链接:

代码语言:javascript
运行
复制
document.getElementById('link2').addEventListener('click', linkclick, false);

代码运行良好,但我尝试检测附加的侦听器都失败了:

代码语言:javascript
运行
复制
// 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。有人能帮帮忙吗?

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2012-07-12 23:58:14

没有办法检查动态附加的事件侦听器是否存在。

查看是否附加了事件侦听器的唯一方法是像这样附加事件侦听器:

代码语言:javascript
运行
复制
elem.onclick = function () { console.log (1) }

然后,您可以通过返回!!elem.onclick (或类似的内容)来测试事件侦听器是否附加到了onclick

票数 62
EN

Stack Overflow用户

发布于 2017-11-16 20:56:25

我做了这样的事情:

代码语言:javascript
运行
复制
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');
    });
}

在附加侦听器时为元素创建特殊属性,然后检查该属性是否存在。

票数 76
EN

Stack Overflow用户

发布于 2013-01-17 02:10:37

我要做的是在你的函数之外创建一个布尔值,它从FALSE开始,当你附加事件时设置为TRUE。在您再次附加事件之前,这将作为某种标志。下面是这个想法的一个例子。

代码语言:javascript
运行
复制
// 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);
 }
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11455515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档