JS中事件和事件处理

 
JS中事件和事件处理
一、事件处理程序:
       在0级中可以这样定义:document.fromName..name.οnclick=function(){};函数事件
  在2级时间模型中,可以调用对象的 addEventListener()方法为特定元素注册事件处理程序。这个方法有 三个参数。第一个参数是要注册处理程序的事件类型名。事件类型应该是喊有小写 HTML 处理程序性质名的字符串,没有前缀 ”on”,如在html中性质onclick,在0级模型中用 onclick属性,而在2级事件模型中就用字符串“ click”。
   第二个参数是处理函数(或监听者),在指定类型的事件发生时调用该函数。
       第三个参数是一个boolean,如果值为true,则指定的事件处理程序将在事件传播的捕捉阶段用于捕捉事件。如果值为false,则事件处理程序就是常规的,当事件直接发生在对象上,或发生在元素的子女上,又向上起泡到该元素时,该处理程序将触发。
       例如,用addEventListener()方法,为<form>元素的提交事件注册一个处理程序:
Document.myform..addEventListener(“submit”,function(e){
Validate(e.target);
}; false)
 如果想捕捉<div>元素中发生的所有mousedown事件,可以使用如下 addEventListener()方法:
       Var mydiv=document.getElementById(“mydiv”);
       Mydiv.addEventListener(“mousedown”,hadleMouseDown, true );
addEventListener() 方法配对的是 removeEventListener() 方法,它的 三个参数与前者相同。
 
二、
       0 级事件模型中,在函数中,关键字 this 引用的就是发生事件的元素。
       2 级事件模型中,不应该依赖事件处理函数中的关键字 this ,而应该使用传递给处理函数的 EVENT 对象的属性 currentTarget . currentTarget 属性引用一个对象,该对象注册了当前的事件处理程序,而且是可以移植的方式注册的。
 
三、把对象注册为事件处理程序:
       事件处理程序是实现了eventListener 接口和handleEvent ()方法的对象,DOM API的javascript规约不要求实现eventListener 接口,而只允许给 addEventListener() 方法直接传递函数引用,如果想用对象作为事件处理程序,那么可以使用如下方式来注册他们:
Function registerObjectEventHandler( elenment,eventtype,listener,captures){
                     Element.addEventListener(eventtype,
Function(event){listener.handleEvent(event);}
,captures);
}
用这个函数可以把任何对象注册为事件处理程序,只要它定义了 handleEvent ()方法。该方法作为监听程序对象的方法而调用,关键字 this 引用的是监听程序对象而不是生成事件的文档元素。
 
四、事件模型和事件类型:
      
 
 
 
2 DOM 没有标准化任何类型的键盘事件!!
   
模块名
事件接口
事件类型
HTMLEvents
Event
abort,blur,change,error,focus,load,reset,resize,
scroll,select,submit,unload
MouseEvents
MouseEvent
Click,mousedown,mousemove,mouseout,
mouseover,mouseup
UIEvents
UIEvent
DOMActivate,DOMFocusIn,DOMFocusOut
MutationEvents
MutationEvent
DOMAttrModified,DOMCharacterDataModified
DOMNodeInserted,DOMNodeInsertedIntoDocument
DOMNodeRemoved,DOMNodeRemovedFromDocument
DOMSubtreeModified
这四个接口构成一个层次。 Event 接口是这个层次的根, UIEvent Event 接口的子接口,
MouseEvent UIEvent 接口的子接口, MutationEvent Event 接口的子接口
 
Evnet 接口定义的属性:
       type
发生的事件的类型,该属性的值是事件类型名,与注册事件处理程序是使用的字符串值相同(如:“ click ”) .
       target
                     发生事件的节点,可能与 currentTarget 不同。
       eventPhase
一个数字,指定了当前所处的事件传播过程的阶段。它的值是常量,可能值包括 Event.CAPTURING_PHASE Event.AT_TARGET
Event.BUBBLING_PHASE.
       currentTarget
发生当前正在处理的事件的节点。如果在传播过程的捕捉阶段或起泡阶段处理事件,这个属性的值就与 target 属性的值不同
       timeStamp
                     一个 Date 对象,声明事件何时发生
       bubbles
                     一个布尔值,声明该事件是否在文档树中起泡。
       cancelable
                     一个布尔值,声明该事件是否具有能用 preventDefault() 方法取消默认动作
Evnet 接口还定义了 2 个方法: stopPropagation() preventDefault().
       调用 stopPropagation() 方法可以阻止事件从当前正在处理它的节点传播。
       调用 preventDefault() 方法阻止浏览器执行与事件相关的默认动作。
 
UIEvent 接口还定义 2 个的属性:
       view
         发生事件的 Window 对象(在 DOM 术语中称为“视图”)
       detail
一个数字,提供时间的额外信息,对于 click 事件、 mousedown 事件和 mouseup 事件,这个字段代表点击的次数。
MouseEvent UIEvent Event 的子接口,它还定义了下列属性:
       button
一个数字,声明在 click 事件、 mousedown 事件和 mouseup 事件中,哪个鼠标键改变了状态。值为 0 表示左键,值为 1 表示中间键,值为 3 表示右键,这个
属性只在鼠标键状态改变时用
       altKey ctrKey metaKey shiftKey
                     这四个布尔值声明在鼠标事件发生时,是否按住了 Alt 键、 Ctr 键、 Meta 键或
                     Shift 键。与 button 属性不同,这些键盘属性对任何鼠标事件类型都有效。
       clientX clientY
                     2 个属性声明鼠标指针相对于客户区或浏览器窗口的 X 坐标和 Y 坐标
       screenX screenY 
                     2 个属性声明鼠标指针相对于浏览器窗口左上角的 X 坐标和 Y 坐标
       relatedTarget
                     该属性引用与事件的目标节点相关的节点。
 
五、 IE 事件
       IE 中的事件起泡: IE 事件模型没有 2 DOM 模型具有的事件捕捉概念,事件可以
沿着包容层次向上起泡。 IE Event 对象没有 DOM Event 对象具有的 stopPropagation() 方法,所以要阻止事件起泡或者进一步传播, IE 事件处理程序必须把 Event 对象的 cancekBubble 属性设为 true window.event.cancelBubble=true
注意:设置 cancelBubble 属性只适用于当前事件,当新事件生成时,将赋予 window.event 新的 Event 对象, cancelBubble 属性将还原为它的默认值 false
       IE 事件处理程序的注册,由于 IE 事件模型不支持事件捕捉,所以它只有 2 个参数,即事件类型和处理函数。可以用 attachEvent() 方法注册事件处理程序:
       fuction f(e){…}
       document.getElementById(“myelt”).attachEvent(“onmouserover”,f)
       // 不要让事件进一步传播
       If(e.stopPropageation)e. stopPropageation();//2 DOM
       Else e.cancelBubble=true;
与之配对的是 detachEvent() 方法。
attachEvent() 方法和addEventListener()方法之间的另一个差别是: attachEvent() 方法注册函数将被作为全局函数调用,而不是作为发生时间的文档元素的方法。也就是说,在 attachEvent() 注册的事件处理程序执行时,关键字 this 引用的是 Window 对象,而不是事件目标元素
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值