zoukankan      html  css  js  c++  java
  • js事件处理 —— 详解

    对于JS事件处理分为四部分:

    1.html事件处理程序

    直接添加到HTML结构中

    解析:用html处理程序可以直接在button元素里直接调用,但是维护性不是很方便

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 
     7 </head>
     8 <body>
     9       <p id="pid">js事件处理程序</p>
    10       <button id="btn" onclick="demo()">点击</button>
    11       <script>
    12           function demo(){
    13               document.getElementById("pid").innerHTML ="html事件处理程序"
    14           }
    15       </script>
    16 
    17 
    18 </body>
    19 </html>

    2.DOM 0级处理事件

    把一个函数赋值给一个事件处理程序属性

    解析:

    1.调用ID属性获得事件元素,然后把事件处理程序赋值给——元素点式事件来调用

    2.当再次用同样的事件的话,前面调用的处理程序将会被覆盖

    3.利用元素.事件 = null ,可以清除事件

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 
     7 </head>
     8 <body>
     9 
    10       <button id="btn">点击</button>
    11       <script>
    12           var btn = document.getElementById("btn") //调用ID属性获得button元素
    13           btn.onclick =function(){        //点击事件1
    14               alert("DOM 0级处理事件1")
    15           }
    16           btn.onclick = function(){        //点击事件2
    17               alert("DOM 0级处理事件2")
    18           }
    19           btn.onclick = null           //清除事件
    20 
    21 
    22 
    23       </script>
    24 
    25 
    26 </body>
    27 </html>

    DOM2级事件处理程序

    DOM2级事件处理程序

    解析:

    DOM2级一个元素用相同的两个事件调用不同方法时不会被覆盖

    addEvenListener("事件",“事件处理方法”)

    e.target.type//获取事件目标的事件类型,返回值事件类型

    e.target.stopPropagation();//阻止事件的冒泡方法

    e.preventDefault()//清除元素的默认方法

    elem.removeEvenlistener("事件","事件处理方法") //清除事件

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style>
     7         #div1{
     8             100px;
     9             height:100px;
    10             border: 1px solid gray;
    11         }
    12         #div2{
    13              50px;
    14             height:50px;
    15             border:1px solid gray;
    16         }
    17     </style>
    18 </head>
    19 <body>
    20 
    21      <div id="div1">
    22          <div id="div2">DOM2级处理事件</div>
    23      </div>
    24      <a  id="aid" href="www.baidu.com">连接百度</a>
    25       <script>
    26           var div1 = document.getElementById('div1')
    27           var div2 = document.getElementById("div2")
    28           var a =document.getElementById("aid")
    29           div1.addEventListener("click",div1Style)
    30           div2.addEventListener("click",div2Style)
    31           div2.addEventListener("click",div3Style)
    32           a.addEventListener("click",aStyle)
    33 
    34           function div1Style() {
    35               this.style.background = "blue"
    36           }
    37           function div2Style(e) {
    38               alert(e.type)  //获取无素的事件类型
    39               alert(e.target.id)  //获取事件目标(元素)的ID
    40               e.stopPropagation()  //阻止父元素的事件冒泡
    41               this.style.background = "black"
    42           }
    43          function div3Style(){
    44               this.style.color = "red"
    45           }
    46           function aStyle(e){
    47               e.preventDefault()//清除元素的默认方法
    48           }
    49           div2.removeEventListener("click",div3Style)//清除事件
    50 
    51       </script>
    52 </body>
    53 </html>

     4.针对IE8和IE8以下的游览器 attchEvent  detachEvent

    当IE游览是IE8或者低于IE8时 使用attchEvent2级的DOM处理事件

    detachEvent来清除处理事件

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8      <button id="btn">点击</button>
     9      <script>
    10          var btn = document.getElementById("btn")
    11          if(btn.addEventListener){
    12              btn.addEventListener("click",demo)
    13          }else if(btn.attachEvent){    //针对IE8 和 IE8以下的游览
    14              btn.attachEvent("onclick",demo)
    15          }else{                      //针对更老版本的游览器
    16              btn.onclick = demo()
    17          }
    18          function demo(){
    19              alert("hello")
    20          }
    21          btn.detachEvent("onclick",demo)  //针对IE8 和 IE8以下的游览 清除事件
    22      </script>
    23 </body>
    24 </html>
  • 相关阅读:
    [JSOI2007][BZOJ1030] 文本生成器|AC自动机|动态规划
    [NOI2014][BZOJ3670] 动物园|KMP
    [HAOI2010][BZOJ2427] 软件安装|tarjan|树型dp
    [JSOI2008][BZOJ1017] 魔兽地图DotR|树型dp
    [JLOI2014][BZOJ3631] 松鼠的新家|树上倍增LCA|差分
    [SDOI2010][BZOJ1975] 魔法猪学院|A*|K短路
    [BZOJ1251] 序列终结者|Splay
    hdu 2141 Can you find it?
    hdu 3152 Obstacle Course
    hdu 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/Ziksang/p/5183393.html
Copyright © 2011-2022 走看看