如何仅使用JavaScript访问绑定到dom元素的事件,而不使用框架
How do I access what events have been bound to a dom element using only JavaScript, no frameworks
如何使用JavaScript访问已绑定到DOM元素的事件,而不是使用库/框架或Firefox插件?只是纯JavaScript。我错误地认为会有一个事件对象作为具有绑定的元素的属性存储。
例如,如果我说,click
, dblclick
和mouseover
绑定到一个元素,我将如何做以下不使用jQuery。只是JavaScript。
function check(el){
var events = $(el).data('events');
for (i in $(el).data('events')) {
console.log(i) //logs click dblclick and mouseover
}
}
我知道jQuery存储一个事件对象作为一个数据属性,即$(el).data('events')
和eventbug插件显示事件绑定,所以必须有办法。
我还将补充说,这个问题的出现是因为我读到旧的IE浏览器中的内存泄漏,以及如何最好在从DOM中删除节点之前删除绑定事件,这使我想到,我如何测试绑定到元素的事件?
如果不能完全控制环境,则无法可靠地知道元素上有哪些侦听器。一些库手动控制事件监听器,例如,jQuery将它们存储在一个对象中,并为元素添加一个自定义属性,这样当偶数发生时,它就会使用自定义属性来查找该元素和事件的监听器并调用它们。
试题:
<div id="d0">div 0</div>
<script type="text/javascript">
var el = document.getElementById('d0')
el.addEventListener('click',function(){alert('hey');},false);
// Make sure listener has had time to be set then look at property
window.setTimeout(function(){alert(el.onclick)}, 100); // null
</script>
因此,要知道添加了哪些侦听器,您需要完全控制。
编辑:
要明确一点,没有可靠的方法来用javascript检查元素并发现添加了哪些侦听器,甚至发现是否添加了侦听器。您可以创建一个事件注册方案来跟踪使用事件注册方法添加的侦听器。但是如果监听器以其他方式添加(例如直接通过addEventListener),那么你的注册方案将不知道它们。
正如在其他地方指出的,jQuery(和其他)不能跟踪侦听器直接添加到元素而不使用jQuery事件注册方法(点击,绑定,鼠标悬停等),因为它们使用这些方法来注册(和调用)侦听器。
// list of onevent attributes; you'll have to complete this list
var arr = ['onclick', 'onmouseover', 'onmouseup'];
for ( var i = 0; i < arr.length; i++ ) {
if ( el[arr[i]] != null ) {
// element has an arr[i] handler
}
}
其中el
是对DOM元素的引用
完整列表在这里
- 我需要创建一个事件侦听器.但是我不想使用任何框架
- 带有事件模拟的javascript UI测试框架
- 如何使用 Kango 框架在 Firefox 中DOCUMENT_COMPLETE收听事件
- 打开任何文本/文档文件进行编辑,使用Javascript/DOJO/或基于框架的点击事件和Java进行编辑
- jQuery 单击事件选择选项不适用于 jQuery Mobile 框架
- angular是否有事件发布/子框架
- Listbox需要触发OnMouseDoubleClick事件.. NET框架
- 通过聚合框架或map/reduce将事件数据嵌入MongoDB中的文档
- 没有可滚动框架的Javascript滚动事件
- jQuery事件回调只运行一次(类angular框架开发)
- 在移动设备上使用jcarousel框架时,在pageshow()事件上延迟几秒钟
- 滑动事件不发射-离子框架
- 在滚动子框架时接收touchmove事件
- 如何在facebook画布框架内捕获滚动事件
- 如何用Ionic框架监听范围拖动事件
- 在iFrame内嵌套的框架中捕获滚动事件
- 使用onclick事件来播放框架scala模板
- kendo ui事件(或来自其他框架的事件)是Javascript事件
- 离子框架中的公开事件
- PhoneGap +事件工具包框架