关于事件绑定,看书遇到的问题,希望有大神能帮忙解惑!谢谢!!

全城武 2015-05-31 03:48:50
在看《Javascript DOM 高级程序设计》。
在第一章,开始编写自己的库,书上有一段事件绑定的方法,看了有些地方不是很懂。
function addEvent(node,type,listener){
//使用前面的方法检查兼容性保证平稳退化
if (!isCompatible()) { return false; }

if (!(node = $(node))) { return false; }

if (node.addEventListener){
//W3C的方法
node.addEventListener(type, listener, false);
return true;
}else if(node.attachEvent){
//MSIE的方法
node['e'+type+listener]=listener; //?
node[type+listener]=function(){ //?
node['e'+type+listener] (window.event); //?
}
node.attachEvent('on'+type , node[type+listener] );
return true;
}

//若两种方法都不具备
return false;
}


想求大神解释一下,在使用MSIE的绑定方法的时候,这一段的作用是什么?
node['e'+type+listener]=listener;    //?
node[type+listener]=function(){ //?
node['e'+type+listener] (window.event); //?
}

...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
打字员 2015-06-03
  • 打赏
  • 举报
回复
引用 4 楼 lyj787505955 的回复:
我也没看懂那两句什么意思,如果是为了修正IE 下 attach(type, handler) handler 中 this 作用域问题,也可以这样

    attach("onclick", function(e){
        var e = e||window.event;
        this = e.srcElement || e.target; 
    })
你这样不行,触发事件的元素不一定就是绑定事件的元素,因为事件冒泡。
打字员 2015-06-02
  • 打赏
  • 举报
回复

<input type="button" value="test1" id="b1">
<input type="button" value="test2" id="b2">
<script type="text/javascript">
window['name'] = 'window';
var s = {'name': 's'};
s['fn'] = function(){alert(this.name)};
document.getElementById('b1').attachEvent('onclick', function() {s['fn']()});
document.getElementById('b2').attachEvent('onclick', s.fn);
//你獲兩個按鈕按下后,alert出來的是什麽
</script>
可以看看下面的文章,文章最后提到的問題就是用上面的代碼邏輯來解決的 http://www.jb51.net/article/16863.htm
Mr-Hero 2015-06-02
  • 打赏
  • 举报
回复
引用 4 楼 lyj787505955 的回复:
我也没看懂那两句什么意思,如果是为了修正IE 下 attach(type, handler) handler 中 this 作用域问题,也可以这样

    attachEvent("onclick", function(e){
        var e = e||window.event;
        this = e.srcElement || e.target; 
    })
修改一下 attachEvent("onclick", function(e){ .....});
Mr-Hero 2015-06-02
  • 打赏
  • 举报
回复
我也没看懂那两句什么意思,如果是为了修正IE 下 attach(type, handler) handler 中 this 作用域问题,也可以这样

    attach("onclick", function(e){
        var e = e||window.event;
        this = e.srcElement || e.target; 
    })
似梦飞花 2015-06-01
  • 打赏
  • 举报
回复
ie下attachEvent this不会指向绑定事件的dom 那段是让this指向绑定的dom 书上有说阿
Go 旅城通票 2015-05-31
  • 打赏
  • 举报
回复
做个闭包,将事件对象传入。。其实没这个必要,使用attach添加的事件会自动将事件对象作为被添加方法的第一个参数,多次一举,直接attach就行

function addEvent(node,type,listener){
//使用前面的方法检查兼容性保证平稳退化
if (!isCompatible()) { return false; }

if (!(node = $(node))) { return false; }

if (node.addEventListener){
//W3C的方法
node.addEventListener(type, listener, false);
return true;
}else if(node.attachEvent){
//MSIE的方法
/* node['e'+type+listener]=listener; //?
node[type+listener]=function(){ //?
node['e'+type+listener] (window.event); //?
}*/
node.attachEvent('on'+type , listener);
return true;
}

//若两种方法都不具备
return false;
}

需要注意区分的是直接使用下面这种方式添加的事件,函数e参数在ie下是为空的,需要做个兼容是真的
DOM.onxxxevnet=function(e){
e=e||window.event;//////////////////////////这种方式添加的事件e参数为null,ie要使用window.event获取事件对象
}

87,904

社区成员

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

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