事件绑定、取消的二种形式 & call

<script>
//call 函数下的一个方法,call方法第一个参数可以改变函数执行过程中的内部this的指向,call方法第二个参数开始就是原来函数的参数列表。

  function fn1(a, b) {
    alert(this);
    alert(a + b);
  }

fn1();    //window
fn1.call(null, 10, 20);    //调用函数    fn1() == fn1.call()
</script>
<script>
  function fn1() {
      alert(this);
  }
  function fn2() {
      alert(2);
  }
//1.给一个对象绑定事件处理函数的第一种形式 
  //
obj.onclick = fn1;
  //给一个对象的同一个事件绑定多个不同的函数
  //document.onclick = fn1;   //document.onclick = fn2; //会覆盖前面绑定fn1
//2.给一个元素绑定事件函数的第二种形式 /*   IE:obj.attachEvent(事件名称,事件函数);    1.没有捕获    2.事件名称有on    3.事件函数执行的顺序:标准ie ---> 正序 非标准ie---> 倒序    4.this指向window   标准:obj.addEventListener(事件名称,事件函数,是否捕获);    1.有捕获    2.事件名称没有on    3.事件执行的顺序是正序    4.this触发该事件的对象 */ /*
document.attachEvent('onclick', function() { fn1.call(document); }); document.attachEvent('onclick', fn2);
*/ //是否捕获 : 默认是false false:冒泡 true:捕获 function bind(obj, evname, fn) { if (obj.addEventListener) { obj.addEventListener(evname, fn, false); } else { obj.attachEvent('on' + evname, function() { fn.call(obj); }); } } bind(document, 'click', fn1); bind(document, 'click', fn2); </script>

 

<script>

//第一种事件绑定形式的取消

document.onclick = fn1;
document.onclick = null;    //取消

/*
第二种事件绑定形式的取消   IE : obj.detachEvent(事件名称,事件函数);   标准 : obj.removeEventListener(事件名称,事件函数,是否捕获); */ document.attachEvent('onclick', fn1); document.attachEvent('onclick', fn2); document.detachEvent('onclick', fn1); //取消 document.addEventListener('click', fn1, false); document.addEventListener('click', fn1, true); document.addEventListener('click', fn2, false); document.removeEventListener('click', fn1, false); //取消 </script>

 

posted @ 2017-04-08 21:30  Booo  阅读(314)  评论(0编辑  收藏  举报