• js中的冒泡事件与事件监听


    冒泡事件

    js中“冒泡事件(bubble)”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的“冒泡”应该说是交换更加准确;js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件。以下面代码为例:

     1<title>冒泡事件</title>
     2<script type="text/javascript">
     3function Add(sText)
     4{
     5    document.getElementById("Console").innerHTML +=sText;
     6}

     7</script>
     8</head>
     9
    10<body onclick="Add(’body事件触发<br />’)">
    11<div onclick="Add(’div事件触发<br />’)">
    12    <p onclick="Add(’p事件触发<br />’)" style="background:#c00;">点击</p>
    13</div>
    14<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>
    15</body>

    查看运行效果

    事件监听

    事件监听准确一点讲可以说是js引擎对用户鼠标、键盘、窗口事件等动作的监视进行的操作,也就是针对用户相应的操作进行附加事件,常用的类似 btnAdd.onclick="alert(’51obj.cn’)"就是一种简单的附加事件,只不过这种方法不支持附加多个事件以及删除事件。以下代 码将实现附加事件后删除事件(IE下):

     1<script type="text/javascript">
     2<!
     3var oP;
     4function window.onload(){
     5    oP=document.getElementById("pContent");
     6    oP.attachEvent("onclick",Click);
     7}

     8function Click(){
     9    alert("做点什么吧");
    10    oP.detachEvent("onclick",Click);
    11}

    12//–>
    13</script>
    14</head>
    15
    16<body>
    17<p id="pContent" style="border:solid 1px #d00; background:#cff;">点击</p>

    查看运行结果

    IE不能称为标准的DOM浏览器,即使是最新的IE8,相对于标准DOM如Firefox、Opera等,它是个“异类”;在Firefox中才真正有称为事件监听的函数addEventListener,如下例

     1<script type="text/javascript">
     2<!
     3window.onload=function(){
     4    var oBtn=document.getElementById("btn");
     5    oBtn.addEventListener("click",Click,false);
     6}

     7function Click(){
     8    alert("触发click事件");
     9}

    10//–>
    11</script>
    12<button id="btn">点击</button>

    查看运行效果

    从上面两个例子看出attachEvent在Firefox中并不支持,IE也不支持addEventListener.因此需要使用兼容性的方法。

     1<script type="text/javascript">
     2<!
     3var oBtn;
     4window.onload=function(){
     5    oBtn=document.getElementById("btn");
     6    if(window.addEventListener){
     7        oBtn.addEventListener("click",Click,false);
     8    }
    //FF,Opera…
     9    else if(window.attachEvent){
    10        oBtn.attachEvent("onclick",Click,false);
    11    }
    //IE
    12    else{
    13        oBtn.onclick=Click;
    14    }
    //Other
    15}

    16
    17function Click(){
    18    alert("事件只执行一次");
    19    if(window.addEventListener){
    20        oBtn.removeEventListener("click",Click,false);
    21    }
    //FF
    22    else if(window.attachEvent){
    23        oBtn.detachEvent("onclick",Click);
    24    }

    25    else{
    26        oBtn.onclick=null;
    27    }

    28}

    29//–>
    30</script>
    31</head>
    32
    33<body>
    34<button id="btn">www.51obj.cn&raquo;&raquo;</button>
    35</body>

    查看运行结果

  • 相关阅读:
    批量管理增量日志(seek、tell)
    字符串和编码
    5.activiti--完成任务
    4.activiti--代理任务Claiming the task
    3.activiti--待办任务
    2.activiti-启动流程实例
    1.activiti-流程图
    html 各种高度
    redis-过期时间、访问限制与缓存
    spring mvc controller 接收参数
  • 原文地址:https://www.cnblogs.com/walkingp/p/1570945.html
Copyright © 2020-2023  润新知