您的位置:首页 > Web前端 > JavaScript

javascript处理事件的兼容写法

2010-10-26 09:24 459 查看


javascript处理事件的一些兼容写法

.title {color:#ff7200;font-size:23px;line-height:28px}
.none {color:#99c;}
.red {color:#f00;}
h4.subject{border:none!important;color:#EE862C;}
/* 细线表格 */

绑定事件

var

addEvent =

function

( obj, type, fn ) {


if

(obj.addEventListener)


obj.addEventListener( type, fn,

false

);


else

if

(obj.attachEvent) {


obj[

"e"

+type+fn] =fn;


obj.attachEvent(

"on"

+type,

function

() {


obj[

"e"

+type+fn]();


});


}

};

另一个实现

var

addEvent =(

function

() {


if

(document.addEventListener) {


return

function

(el, type, fn) {


el.addEventListener(type, fn,

false

);


};


}

else

{


return

function

(el, type, fn) {


el.attachEvent(

'on'

+ type,

function

() {


return

fn.call(el, window.event);


});


}


}

})();

绑定onpropertychange事件

onpropertychange是微软制造的一个事件,它在一个元素的属性发生变化的时候触发,常见的有文本的长度改变,样长改变等,FF大致和
它相似的属性为oninput事件,不过它只针对textfield与textarea的value属性。safari,firefox,chrome与
opera都支持此属性。

var

addPropertyChangeEvent =

function

(obj,fn) {


if

(window.ActiveXObject){


obj.onpropertychange = fn;


}

else

{


obj.addEventListener(

"input"

,fn,

false

);


}

}

移除事件

var

removeEvent =

function

( obj, type, fn ) {


if

(obj.removeEventListener)


obj.removeEventListener( type, fn,

false

);


else

if

(obj.detachEvent) {


obj.detachEvent(

"on"

+type,obj[

"e"

+type+fn] );


obj[

"e"

+type+fn] =

null

;


}

};

加载事件

var

loadEvent =

function

(fn) {


var

oldonload = window.onload;


if

(

typeof

window.onload !=

'function'

) {


window.onload =fn;


}

else

{


window.onload =

function

() {


oldonload();


fn();


}


}

}

阻止事件

var

stopEvent =

function

(e){


e = e || window.event;


if

(e.preventDefault) {


e.preventDefault();


e.stopPropagation();


}

else

{


e.returnValue =

false

;


e.cancelBubble =

true

;


}


},

如果仅仅是阻止事件冒泡

var

stopPropagation =

function

(e) {

 

e = e || window.event;


if

(!+

"/v1"

) {

 

e.cancelBubble =

true

;


}

else

{

 

e.stopPropagation();


}

}

取得事件源对象

相当于Prototype.js框架的Event.element(e)

var

getEvent =

function

(e){

 

e = e || window.event;


var

target= event.srcElement ? event.srcElement : event.target;


return

target

}

function

getEvent() {


if

(window.event)

return

window.event;


var

c =getEvent.caller;


while

(c.caller) c =c.caller;


return

c.arguments[0];

}

或者这个功能更强大,我在开发datagrid时开发出来的,详细用法见《一步步教你实现表格排序(第二部分)》


var

getEvent =

function

(e) {


var

e = e || window.event;


if

(!e) {


var

c =

this

.getEvent.caller;


while

(c) {


e = c.arguments[0];


if

(e && (Event == e.constructor || MouseEvent== e.constructor)) {


break

;


}


c =c.caller;


}


}


var

target= e.srcElement ? e.srcElement : e.target,


currentN = target.nodeName.toLowerCase(),


parentN= target.parentNode.nodeName.toLowerCase(),


grandN = target.parentNode.parentNode.nodeName.toLowerCase();


return

[e,target,currentN,parentN,grandN];

}

最后附上DOM3.0事件的一览表

typeBubbling phaseCancelableTarget node typesDOM interface
DOMActivate
YesYes
Element

UIEvent


DOMFocusIn
YesNo
Element

UIEvent


DOMFocusOut
YesNo
Element

UIEvent


focus
NoNo
Element

UIEvent


blur
NoNo
Element

UIEvent


textInput
YesYes
Element

TextEvent


click
YesYes
Element

MouseEvent


dblclick
YesYes
Element

MouseEvent


mousedown
YesYes
Element

MouseEvent


mouseup
YesYes
Element

MouseEvent


mouseover
YesYes
Element

MouseEvent


mousemove
YesYes
Element

MouseEvent


mouseout
YesYes
Element

MouseEvent


keydown
YesYes
Element

KeyboardEvent


keyup
YesYes
Element

KeyboardEvent


mousemultiwheel
YesYes
Document

,
Element

MouseMultiWheelEvent


mousewheel
YesYes
Document

,
Element

MouseWheelEvent


DOMSubtreeModified
YesNo
Document

,
DocumentFragment

,
Element

,
Attr

MutationEvent


DOMNodeInserted
YesNo
Element

,
Attr

,
Text

,
Comment

,
CDATASection

,
DocumentType

,
EntityReference

,
ProcessingInstruction

MutationEvent


DOMNodeRemoved
YesNo
Element

,
Attr

,
Text

,
Comment

,
CDATASection

,
DocumentType

,
EntityReference

,
ProcessingInstruction

MutationEvent


DOMNodeRemovedFromDocument
NoNo
Element

,
Attr

,
Text

,
Comment

,
CDATASection

,
DocumentType

,
EntityReference

,
ProcessingInstruction

MutationEvent


DOMNodeInsertedIntoDocument
NoNo
Element

,
Attr

,
Text

,
Comment

,
CDATASection

,
DocumentType

,
EntityReference

,
ProcessingInstruction

MutationEvent


DOMAttrModified
YesNo
Element

MutationEvent


DOMCharacterDataModified
YesNo
Text

,
Comment

,
CDATASection

,
ProcessingInstruction

MutationEvent


DOMElementNameChanged
YesNo
Element

MutationNameEvent


DOMAttributeNameChanged
YesNo
Element

MutationNameEvent


load
NoNo
Document

,
Element

Event


unload
NoNo
Document

,
Element

Event


abort
YesNo
Element

Event


error
YesNo
Element

Event


select
YesNo
Element

Event


change
YesNo
Element

Event


submit
YesYes
Element

Event


reset
YesYes
Element

Event


resize
YesNo
Document

,
Element

UIEvent


scroll
YesNo
Document

,
Element

UIEvent


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: