这里是文章模块栏目内容页
js事件绑定和事件冒泡

事件绑定和事件冒泡

什么事件冒泡?

  1、冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

事件处理程序

  1、HTML事件处理程序:事件直接加载在HTML结构中;明显缺点--HTML和JS代码耦合,处理修改不方便。

  2、DOM 0级事件处理程序:将某个事件处理函数赋值给某个事件。

  3、DOM 2级事件处理程序:对事件进行监听,若监听事件发生了则调用事件处理函数。

  使用监听方法:

        A.为元素添加多个事件处理程序,触发时会按照添加顺序依次调用。

         addEventListener(type, listener, useCapture)

            type:事件类型,不含“on”,比如“click”、“mouseover”、“keydown”等。 
            listener :实现了 EventListener 接口或者是 JavaScript 中的函数。 
            useCapture :是否使用捕捉,一般用 false 。

          attachEvent(type, listener);-------------------------IE浏览器
            type: 事件类型,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。 
            listener :实现了 EventListener 接口或者是 JavaScript 中的函数。

        B.移除添加的事件处理程序。

          removeEventListener(event,function,capture/bubble),不能移除匿名添加的函数。

         detachEvent(event,function);----------------------IE浏览器

JQ事件绑定方法

1、bind():$('a').bind('click', function() { alert("That tickles!") });

  JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。

2、.live():$('a').live('click', function() { alert("That tickles!") });

  JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a’作为参数。任何时候只要有事件冒泡到document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与’a’这一CSS选择器是否匹配,如果都是的话,则执行函数。

3、.delegate()$('#container').delegate('a', 'click', function() { alert("That tickles!") });

  JQuery扫描文档查找$(‘#container’),并使用click事件和’a’这一CSS选择器作为参数把alert函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CCS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。

4、.on():$("#test").on('mousedown', function(e) {$(this).text('触发事件:' + e.type)})

  .on()方法绑定的事件不需要关心注册该事件的元素何时被添加进来,也不需要重复绑定。移除.on()绑定的事件用.off()方法。具体用法灵活可以绑定多个元素、多个事件。

 

事件阻止冒泡的方式:

  1、event.stopPropagation();

  2、return false;不仅阻止了事件往上冒泡,而且阻止了事件本身。如文本框获取焦点后,当我们使用 return false 时,鼠标单击红色区域光标仍然停留在文本输入框内。

  3、event.cancelBubble();--------IE浏览器,效果同1

 

部分时候我们通过判断事件的触发源(event.srcElement||event.target)来执行不同的函数。 如:点击空白区域关闭遮罩层。