通过什么方法可以获取某个dom元素上面都绑定了哪些事件

前端马内 2012-10-19 03:35:10
比如说<div id="main" onclick="whoami()"></div>中有个onclick绑定了whoami方法,我知道有id="main"这个元素,但是我不知道onclick或者onmouseover之类的(行为更表现是分离的),我要怎么获取这个元素绑定了些什么方法,通过什么绑定的。一时想到的这个问题,自己没有想到怎么做,希望高手指点下.谢谢!
...全文
2286 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
前端马内 2012-10-19
  • 打赏
  • 举报
回复
木有看到dom["Listener-"+type]=!0;,这样的确可以。
泡泡鱼_ 2012-10-19
  • 打赏
  • 举报
回复
你自己看仔细,我前面加多了个addEvent函数去处理监听事件的绑定,以及记录监听事件。并不是第一次发的那些代码了
function addEvent(dom,type,fn) {
if(document.addEventListener) {
dom.addEventListener(type, fn, false);
} else if(document.attachEvent) {
dom.attachEvent('on' + type, fn);
} else {
dom['on' + type] = fn;
};
dom["Listener-"+type]=!0;
}

前端马内 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

“你运行下你会发现少了onmouseover“
什么意思?我上面的例子,输出的是:blur,click,mouseover
不是这三个事件么?
[/Quote]
只有前两个,mouseover没有...
泡泡鱼_ 2012-10-19
  • 打赏
  • 举报
回复
“你运行下你会发现少了onmouseover“
什么意思?我上面的例子,输出的是:blur,click,mouseover
不是这三个事件么?
前端马内 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

HTML code
<script type="text/javascript">
function addEvent(dom,type,fn) {
if(document.addEventListener) {
dom.addEventListener(type, fn, false);
} else if(document.attachEvent) {
……
[/Quote]
这个我也知道,但是你运行下你会发现少了onmouseover,我就是想知道怎么获取addEvent添加的事件(这里的onmouseover)。
泡泡鱼_ 2012-10-19
  • 打赏
  • 举报
回复
<script type="text/javascript">
function addEvent(dom,type,fn) {
if(document.addEventListener) {
dom.addEventListener(type, fn, false);
} else if(document.attachEvent) {
dom.attachEvent('on' + type, fn);
} else {
dom['on' + type] = fn;
};
dom["Listener-"+type]=!0;
}

function getDomEvent(o){
var a="blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(' ');
var b=[];
for(var i=0;i<a.length;i++){
if(o['on'+a[i]] || o["Listener-"+a[i]] || o.getAttribute('on'+a[i])){
b.push(a[i]);
};
};

return b;
};
function x(){
alert('1')
}
window.onload=function(){
var o=document.getElementById("test");
o.onclick=function(){
alert('1');
};
o.onblur=function(){
alert('1');
};
addEvent(o,'mouseover',x);//使用这种方式去临听事件

var b=getDomEvent(o);
alert(b);//绑定的事件列表
}
</script>
<input type="text" id="test" value="1"/>
前端马内 2012-10-19
  • 打赏
  • 举报
回复
能说的具体点么,来点代码也行啊。
KK3K2005 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 1 楼 的回复:

这个问题还是挺好的,有时会需要。

在不知道绑了什么时,定点去提,肯定是自相矛盾的。

那样的话,一般就是遍历了,可以举出一个目标对象的所有属性和方法,检测是否有值,并根据值的情况进行报告。

比如onclick这种事件,只有两种情形,一是onclick="javascript:直接写执行代码",二是onclick="javascript:thefor……

我是通过addEventlistener绑定的事件怎么去取呢?
[/Quote]

重写 addEventlistener
这样我就可以收集 我想要的信息 和做点预处理
前端马内 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

下面是个办法,但只能获取顶级事件。事件内嵌套的无法获取到;
JScript code
<script type="text/javascript">
function getDomEvent(o){
var a="blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup……
[/Quote]
能获取dom内绑定的事件,但是addEventListener绑上的事件还是无法获取的到么。。。
泡泡鱼_ 2012-10-19
  • 打赏
  • 举报
回复
下面是个办法,但只能获取顶级事件。事件内嵌套的无法获取到;
<script type="text/javascript">
function getDomEvent(o){
var a="blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(' ');
var b=[];
for(var i=0;i<a.length;i++){
if(o['on'+a[i]] || o.getAttribute('on'+a[i])){
b.push(a[i]);
}
};
return b;
};
window.onload=function(){
var o=document.getElementById("test");
o.onclick=function(){
alert('1');
};
o.onblur=function(){
alert('1');
}
var b=getDomEvent(o);
alert(b);//绑定的事件列表
}
</script>
<input type="text" id="test" value="1" onfocus="alert('xxx')"/>
前端马内 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个问题还是挺好的,有时会需要。

在不知道绑了什么时,定点去提,肯定是自相矛盾的。

那样的话,一般就是遍历了,可以举出一个目标对象的所有属性和方法,检测是否有值,并根据值的情况进行报告。

比如onclick这种事件,只有两种情形,一是onclick="javascript:直接写执行代码",二是onclick="javascript:theforever_csdn()"或者on……
[/Quote]
我是通过addEventlistener绑定的事件怎么去取呢?
  • 打赏
  • 举报
回复
列出事件和属性的方法,可以参考这个
http://blog.csdn.net/theforever/article/details/6029382
  • 打赏
  • 举报
回复
另外,如果只针对事件的话,可以把事件名称存到一个数组里,然后去读值,比遍历效率高。
  • 打赏
  • 举报
回复
这个问题还是挺好的,有时会需要。

在不知道绑了什么时,定点去提,肯定是自相矛盾的。

那样的话,一般就是遍历了,可以举出一个目标对象的所有属性和方法,检测是否有值,并根据值的情况进行报告。

比如onclick这种事件,只有两种情形,一是onclick="javascript:直接写执行代码",二是onclick="javascript:theforever_csdn()"或者onclick="theforever_csdn()"。都可以通过字串操作来鉴别。

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧