跨浏览器事件处理程序(添加、删除、触发器)
Cross-Browser Event Handler (Add, Remove, Trigger)
我有点困惑,当我尝试将函数绑定到 IE7、IE9、Chrome 18、Firefox 12 中的事件(如点击)时,它工作得很好,但是当我尝试删除与事件关联的函数时,只有 IE7 和 Firefox 能够取消附加该功能。这是我正在使用的代码,我做错了什么?
bindEvent:function(el,evtType,fn){
if(el.addEventListener){
el.addEventListener(evtType,fn,false);
} else {
if(el.attachEvent){
var _el=el;
var f = function(){fn.call(_el,window.event);}
el.attachEvent( 'on'+evtType, f);
el[fn.toString()+evtType]=f;
//el.attachEvent('on'+evtType,fn) ;
} else {
el['on'+evtType]=fn;
}
}
return el;
},
removeEvent: function(el,evtType, fn ) {
if( el.removeEventListener){
el.removeEventListener( evtType, fn, false );
}else if(el.detachEvent){
el.detachEvent('on'+evtType,el[fn.toString()+evtType]);
el[fn.toString()+evtType]=null;
}else{
el['on'+evtType]=function(){};
}
return el;
}
我测试这个的代码是:
var a = document.getElementById('just_a_div');
bindEvent(a,'click',function(){alert('Hi There');});
为了尝试删除,我几乎使用相同的方法:
removeEvent(a,'click',function(){alert('Hi There');});
任何想法或一些预制的片段可以在所有浏览器上有效地完成此任务?希望解决方案可以出现,永远感激。
您的代码适用于IE8,Firefox和chrome中的我的示例(该事件将在五秒后删除)。也许您的测试用例中有错误?你能给我们展示你的测试用例吗?
=== UPDTAE ===
在javascript中,当函数具有相同的参数和内容时,它们也永远不会相同。尝试: alert(function(){alert('Hi There');} == function(){alert('Hi There');});
结果是 false
。
是平等的,如果他们对同一函数的敬畏。所以var fn = function() { alert('clicked'); }; alert(fn == fn);
true
.
您应该像我的示例一样对bindEvent
和removeEvent
函数中的函数使用相同的引用。
用纯javascript代码支持所有浏览器有点困难,更好的方法是使用javascript框架,我认为最好的之一是JQuery,当然还有很多其他框架是为不同的目的而设计的。
使用 jQuery 实现跨浏览器支持。您只需使用 .bind 附加事件,并使用取消绑定将其分离即可。
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 悬停功能触发器
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 如何在HTML输入字段中添加不可删除的后缀
- addData()从最新图表中删除.js 2.1.3-怎么了
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 删除CKEditor工具栏按钮,但不删除功能
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 正在删除node.js中已验证的网站
- 在提交触发器之前从查询输入中删除标记
- 引导程序 3 删除模式触发器
- 查询 MongoDB 删除触发器
- 跨浏览器事件处理程序(添加、删除、触发器)
- tinyMCE对象删除事件触发器