首页 > 代码库 > 8月18号=》431页-435页

8月18号=》431页-435页

15.3.4  转发事件

    DOM提供了dispatchEvent方法用于事件的转发,该方法属于Node对象,因此DOM的每个Node元素都可调用该方法,从而将事件直接

    转发到本节点。该方法的语法格式如下:

      target.dispatchEvent(Event event):将event事件转发到target上。

    与Internet Explorer事件模型里的重定向事件不同的是,dispatch()方法必须转发人工合成事件(Synthetic Event),不能直接转发系统创建的事件。

    DOM为创建人工合成事件提供了如下方法。

      document.createEvent(String type):该方法创建一个事件对象,其中type参数用于指定事件类型,普通事件可使用Events,UI事件可使用

                        UIEvents,鼠标事件可使用MouseEvents。

    通过上面的方法得到一个事件后,可调用事件的如下方法来初始化。

      initEvent(String eventTypeArg,boolean canBubbleArg,boolean cancelableArg):用于初始化一个普通事件,第一个参数用于指定该事件

      类型,如click等;等二个参数用于指定该事件是否支持冒泡;第三个参数用于指定该事件是否有默认行为,且可通过preventDefault()方法取消

      该默认行为。

      initUIEvent(String typeArg,boolean canBubbleArg,boolean cancelableArg,Window viewArg,long detailArg):该方法的前3个参数

        的意义与上一个方法中的3个参数完全相同。后两个参数的意义与介绍UIEvent时的view、detail两个属性相同。

    转发事件代码示范:

      //脚本代码

      //第一个按钮被单击时的事件处理函数

      var rd = function(evt)

      {

        document.getElementById("show").innerHTML+="事件冒泡阶段:"+evt.currentTarget.value+"被单击了<br/>";

        //创建一个普通事件

        var e = document.createEvent("Events");

        //初始化事件对象,指定该事件支持冒泡,不允许取消默认行为

        e.initEvent("click",true,false);

        //将事件转发到按钮bn2

        document.getElementById("bn2").dispatchEvent(e);

      }

      //第二个按钮被单击时的事件处理函数

      var gotClick = function(evt)

      {

        document.getElementById("show").innerHTML+="事件冒泡阶段:"+evt.currentTarget.value+"被单击了<br/>";

      }

      //分别为两个按钮绑定事件处理函数

      document.getElementById("bn1").addEventListener("click",rd,false);

      document.getElementById("bn2").addEventListener("click",gotClick,false);

      

      //html代码

      <input id="bn1" type="button" value="http://www.mamicode.com/按钮1"/>

      <input id="bn2" type="button" value="http://www.mamicode.com/按钮2"/>

 

15.3.5  取消事件的默认行为

    DOM也提供了取消事件默认行为的方法,DOM中的事件对象都提供了preventDefault()方法,该方法不需要参数,只要执行了给定事件的

    preventDefault方法,该事件的默认行为就将失效。

    代码示范:

      <a id="mylink" href=http://www.mamicode.com/www.baidu.com>导航

      var killClicks = function(event)

      {

        //取消事件的默认行为

        event.perventDefault();

        alert("超链接被单击,但已取消默认的导航跳转效果");

      }

      //为超链接绑定事件处理函数(捕获阶段)

      document.getElementById("mylink").addEventListener("click",killClicks,true);

    //点击导航链接后页面将弹出“超链接呗单击,但已取消默认的导航跳转效果”对话框,且不会跳转到baidu.com链接,因为perventDefault方法已经

    取消了该事件的默认行为,但是该方法后面的脚本代码依然会执行。