Home  >  Q&A  >  body text

javascript - 为什么使用addEvent或者attachEvent绑定的函数会自执行?直接使用onclick绑定的事件不会执行

http://jsbin.com/werexoxeqe/e...
为什么使用addEvent或者attachEvent绑定的函数会自执行?直接使用onclick绑定的事件不会执行??

PHP中文网PHP中文网2654 days ago369

reply all(2)I'll reply

  • 大家讲道理

    大家讲道理2017-04-11 10:27:06

    call会立即执行,用bind就ok了。改成这样咯

    addEvent(document.querySelector('.icon-bofang'),'click',xxx.bind(obj))
    document.querySelector('.icon-bofang').onclick = xxx.bind(obj)

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 10:27:06

    首先,addEvent这是一个人为封装的方法:

    然后你调用了这个方法

    addEvent(document.querySelector('.icon-bofang'),'click',xxx.call(obj))

    这个方法实际上做的事是:

    ele["on"+event]=fn; 

    也就是

    document.querySelector('.icon-bofang').onclick=xxx.call(obj);

    这不就直接执行了么?
    更简单一点,你直接试试这句:

    document.querySelector('.icon-bofang').onclick=console.log('我立马就执行了');

    看出来了么?
    下面这句外面套了个匿名函数,而匿名函数没有被立即执行!

    document.querySelector('.icon-bofang').onclick=function(){
      console.log('哥点击后才执行');
    }

    OVER~

    **

    所以你传入方法参数应该这样:

    **

        addEvent(document.querySelector('.icon-bofang'), 'click', function() {
            xxx.call(obj);
        });

    reply
    0
  • Cancelreply