码迷,mamicode.com
首页 > 其他好文 > 详细

事件处理

时间:2014-11-10 19:36:35      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   使用   sp   数据   

事件模型

1.DOM第0级事件模型

将一个函数实例的引用赋值给DOM元素的属性

        $(‘#example‘)[0].onmouseover = function(event) {
          say(‘Crackle!‘);
        };

 

通过HTML特性声明处理器时会自动创建一个将特性值作为函数体的匿名函数。

  element.onmouseover = function(event) {
say(‘hi‘); //<img onmouseover=say(‘hi‘)>
}

 

event实例属性提供关于当前被处理的已触发事件的信息,如哪个元素触发的事件、鼠标事件的坐标和键盘事件按了哪个键盘。event和window.event

获取目标元素:event.target和event.srcElement

 事件冒泡

目标元素有机会处理事件后,事件模型会检查目标元素的父元素,看其是否已经为此事件类型创建了处理器。如果是就调用已创建的处理器,之后检查父元素直到DOM树的顶部。它允许我们在任何层级的元素创建处理器,以便处理发生在后代元素的事件。

标准浏览器调用event的stopPropagation(),IE设置cancelBubble的值为true。可以对表单控件验证,检测到数据输入有问题返回false。

 

2.DOM第2级事件模型

 

DOM第2级事件处理器(也成为监听器)通过元素方法创建。每个元素都定义一个名为addEventListener()的方法

addEventListener(eventType,listener,useCapture)

    eventType:获取要处理的事件类型,如click、mouseover、keydown

    listener:函数引用,在元素创建指定事件类型的处理器,event实例是传入这个函数的第一个参数

    useCapture:布尔类型,true为捕获处理器,false为冒泡处理器

在同一元素为同一事件类型创建多个事件处理器,触发顺序是随机的。

      $(function(){
        var element = $(‘#example‘)[0];
        element.addEventListener(‘click‘,function(event) {
          say(‘BOOM once!‘);
        },false);
      });

事件传播

捕获阶段:触发事件似,事件先从DOM数的根部向下传播到目标元素。

捕获处理器会在捕获阶段触发事件

IE9之后才支持DOM第2级事件模型

3.IE事件模型

attachEvent(eventName,handler)

eventName:字符串,指定事件类型的名称,采用DOM第0级的属性如onclick

handler:需要创建的函数event实例要用window.event获取。

 

二、jQuery事件模型

1.绑定时间处理器

bind(eventType, data, handler)

eventType:可以使用空格分隔的列表指定多个事件类型,通过在事件名称的后面添加圆点的后缀指定命名空间。

data:数据,附加到event实例的data属性,省略则指定第二个参数为处理器函数

$(‘#example‘)
          .bind(‘click‘,function(event) {
            say(‘BOOM once!‘);
          });

用命名空间对事件处理器分组

//为事件名称添加圆点分隔的后缀指定
$(‘thing1‘).bind(‘click.editMode‘,someListener);
$(‘thing2‘).bind(‘click.editMode‘,someOtherListener);

//删除
$(‘*‘).unbind(‘click.editMode‘);

bind(eventMap):允许一次创建多个事件类型的处理器,属性的名称指定事件类型,属性的值提供处理器。

 $(‘.what‘).bind({
    click: function(event){},
    mouseover: function(event)
  });

one(eventType, data, listener):创建函数作为匹配集元素的事件处理器,执行完毕后自动删除。

删除事件处理器

unbind(eventType,listener, event)

Event实例

属性: altKey  ctrlKey  currentTarget  data  metaKey  pageX  pageY  relatedTarget  screenX  screenY  shiftKey  result  target  timestamp  type  which

方法:preventDefault()  stopPropagation()  stopImmediatePropagation()  isDefaultPrevented()  isPropagationStopped()  isImmediatePropagationStopped()

预先管理事件处理器

预先为还不存在的元素创建事件处理器

jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理事件绑定

//live(event,data,listerner) 只能用于选择器,不能用于衍生出来的包装集  $(‘img‘).closet(‘div‘).live()不合法 删除die(eventType,listener)

on(events,[selector],[data],listener)  当第二个参数‘selector‘为null时,on()和bind()其实在用法上基本上没有任何区别了

5.触发事件处理器

在脚本控制下触发处理器的执行,可以将这样的处理器定义为顶级函数,但事件处理器定义为内联的匿名函数更常用。将事件处理器作为函数调用不会触发语义动作,也不会冒泡

trigger(eventType, data):在所有匹配元素调用为传入的事件类型创建的处理器     返回包装集

  data:作为第二个参数传入处理器的顺序(第一个是event)

triggerHander(eventType, data):在所有匹配元素调用为出阿奴事件类型创建的处理器 不会冒泡,不会执行语义动作,不会触发live事件

6.其他事件的方法

切换作用的监听器

toggle(listener1,listener2):将传入的函数创建为包装集所有元素的单击事件处理器的循环列表。当到达列表最后一个处理器,第一个处理器是下次要调用的处理器。

常见用途:根据元素被单击的次数切换元素的状态。

在元素上悬停鼠标

hover(enterHander,leaveHander):        enterHander——函数要成为mouseenter处理器的函数     

                                                          leaveHander——函数要成为mouseleave处理器的函数

hover(handler)                                     handler——mouseenter和mouseleave事件发生时都会调用的单个处理器

 为匹配元素创建mouseenter和mouseleave事件处理器。它们只在鼠标进入或离开覆盖区域触发,忽略移动到子元素的转变。

 

事件处理

标签:style   blog   io   color   ar   os   使用   sp   数据   

原文地址:http://www.cnblogs.com/surahe/p/4085006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!