js 事件绑定 与 删除 IE 8以下删除失败

null56 2017-07-20 11:55:15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
#div1{ width: 150px; height: 150px; border: solid 1px #333;}
</style>
</head>
<body>
<input id="btn1" type="button" value="删除事件" />
<div id="div1">click</div>
</body>
</html>
<script>
function bind(obj,event,fn,b){ // 绑定事件的封装?
obj.addEventListener
?obj.addEventListener(event,fn,b)
:obj.attachEvent("on"+event,function(){
fn.call(obj)
},b)
}

function unbind(obj,event,fn){
obj.addEventListener
?obj.removeEventListener(event,fn,false)
:obj.detachEvent("on"+event,fn)
}

window.onload = function(){
var oDiv = document.getElementById("div1")
var oBtn = document.getElementById("btn1")
bind(oDiv,"click",fn1)
bind(oBtn,"click",fn2)

function fn1(){
alert("这是一个点击事件")
}

function fn2(){
alert( "删除 oDiv的点击事件")
unbind(oDiv,"click",fn1)
}
/* IE6~IE8 无法删除?*/
}
</script>


不知道为什么 IE8 以下删除 失败,有经验的帮忙看看
...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
null56 2017-07-20
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
obj.attachEvent("on"+event,function(){ fn.call(obj) },b) attachEvent你绑定的是匿名函数,又不是fn,你解绑fn肯定不行啊

    var ieEvtKV = {};//ie用全局变量存储匿名函数才能解绑
    function bind(obj, event, fn, b) { // 绑定事件的封装?
        obj.addEventListener ? obj.addEventListener(event, fn, b)
       : (ieEvtKV[fn.toString()] = function () { fn.call(obj) },
        obj.attachEvent("on" + event, ieEvtKV[fn.toString()], b))
    }

    function unbind(obj, event, fn) {
        obj.addEventListener
        ? obj.removeEventListener(event, fn, false)
        :( obj.detachEvent("on" + event, ieEvtKV[fn.toString()]),delete ieEvtKV[fn.toString()])
    }
有用,已经解决了!!
  • 打赏
  • 举报
回复
obj.attachEvent("on"+event,function(){
fn.call(obj)
}
,b)

attachEvent你绑定的是匿名函数,又不是fn,你解绑fn肯定不行啊

var ieEvtKV = {};//ie用全局变量存储匿名函数才能解绑
function bind(obj, event, fn, b) { // 绑定事件的封装?
obj.addEventListener ? obj.addEventListener(event, fn, b)
: (ieEvtKV[fn.toString()] = function () { fn.call(obj) },
obj.attachEvent("on" + event, ieEvtKV[fn.toString()], b))
}

function unbind(obj, event, fn) {
obj.addEventListener
? obj.removeEventListener(event, fn, false)
:( obj.detachEvent("on" + event, ieEvtKV[fn.toString()]),delete ieEvtKV[fn.toString()])
}

87,994

社区成员

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

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