JavaScript事件处理程序

html事件处理程序
元素内置了一些预定的事件处理程序
input有自己的事件 button也有自己的事件

html特性和事件处理程序同名。
click事件,onclick事件处理程序。
onclick出现在html中成为html特性。
这个概念要明晰。
html特性的值可以是可执行的JavaScript语句,也可以是script脚本。
<input type="button" value="武汉" onclick="alert('珞珈山')"/>
----------------------------------------------------------------------
this的指向取决于他所处的位置
<html>
<head>
  <script>
    function show() { alert(this); }
  </script>
</head>
<body>
  <input id="city" type="button" value="武汉" onclick="show()"/>
  <input id="city" type="button" value="济南" onclick="alert(this)"/>
</body>
</html>
[object Window]
[object HTMLInputElement]
-----------------------------------------------------------------------
html事件处理程序和js事件处理程序在this作用域上的区别:
<html>
<body>
  <input id="city" type="button" value="武汉" onclick="show()"/>
  <input id="province" type="button" value="湖北"/>
</body>
<script>
  function show() {
    console.log(this);
  }
  let province = document.getElementById('province');
  province.onclick = function show() {
    console.log(this); 
  };
</script>
</html>
结果显示:
Window
<input id="province" type="button" value="湖北"/>
----------------------------------------------------------------------
不要使用js预留的关键字比如clear定义函数名,否则不执行也不报错。
--------------------------------------------------------------------
使用Javascript事件处理程序可以通过将元素属性的引用置空从而消除方法。
<html>
<body>
  <input id="province" type="button" value="湖北"/>
  <input type="button" onclick="aaa()" value="清除"/>
</body>
<script>
  let province = document.getElementById('province');
  province.onclick = function show() {
    console.log(this); 
  };
  function aaa() {
    province.onclick = null;
  }
</script>
</html>
事件修饰符once也就是说这个方法只能执行一次,在底层实现上也许是采用计数法和将元素事件属性
置为空来到达目的。
===============================================================================
DOM2级别的事件处理程序
addEventListener('事件名', 事件处理程序, 是否在捕获阶段执行);
removeEventListener('事件名', 事件处理程序, 是否在捕获阶段执行);
这里需要注意的一点是事件处理程序最好不要使用匿名事件处理函数,因为如果使用匿名,那么无法将这个事件注销。
<html>
<body>
  <input id="china" type="button" value="中国"/>
  <input id="america" type="button" value="美国"/>
</body>
<script>
  let china = document.getElementById('china');
  china.onclick = function show() {
    console.log(this); 
  };
  let america = document.getElementById('america');
  function display() {
    console.log(this.id);
    console.log(this.type);
    console.log(this.value);
  };
  america.addEventListener('click', display, false);
  //america.removeEventListener('click', display, false);
</script>
</html>
===============================================================================
IE事件处理程序
<html>
<body>
  <input id="china" type="button" value="中国"/>
</body>
<script>
  let china = document.getElementById('china');
  china.attachEvent('onclick', function() {
    console.log('IE');
  });
  china.detachEvent('onclick', function() {
    console.log('IE');
  });
</script>
</html>
===============================================================================
跨浏览器事件处理程序
<html>
<body>
  <input id="china" type="button" value="中国"/>
</body>
<script>
  let china = document.getElementById('china');
  let EventUtil = {
    addHandler: function(element, type, handler) {
      //考虑DOM2级事件
      if (element.addEventListener) {
        element.addEventListener(type, handler, false);
      } else if (element.attachEvent) {
        //考虑IE级别事件
        element.addEvent('on'+type, handler);
      } else {
        //考虑DOM0级别事件
        element['on' + type] = handler;
      }
    },
    removeHandler: function(element, type, handler) {
      if (element.removeEventListener) {
        element.removeEventListener(type, handler, false);
      } else if (element.detachEvent) {
        element.detachEvent('on'+type, handler);
      } else {
        element['on'+type].handler = null;
      }
    }
  }
  EventUtil.addHandler(china, 'click', function() {
    console.log('click');
  });
</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值