javascript 处理事件绑定的一些兼容写法
2018-10-12 13:50
701 查看
绑定事件
另一个实现
绑定onpropertychange事件
onpropertychange是微软制造的一个事件,它在一个元素的属性发生变化的时候触发,常见的有文本的长度改变,样长改变等,FF大致和它相似的属性为oninput事件,不过它只针对textfield与textarea的value属性。safari,firefox,chrome与 opera都支持此属性。
移除事件
加载事件
阻止事件
如果仅仅是阻止事件冒泡
取得事件源对象
相当于Prototype.js框架的Event.element(e)
或者这个功能更强大,我在开发datagrid时开发出来的,详细用法见《一步步教你实现表格排序(第二部分)》。
最后附上DOM3.0事件的一览表
作者:Ruby's Louvre
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
}
或者这个功能更强大,我在开发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事件的一览表
type | Bubbling phase | Cancelable | Target node types | DOM interface |
---|---|---|---|---|
DOMActivate | Yes | Yes | Element | UIEvent |
DOMFocusIn | Yes | No | Element | UIEvent |
DOMFocusOut | Yes | No | Element | UIEvent |
focus | No | No | Element | UIEvent |
blur | No | No | Element | UIEvent |
textInput | Yes | Yes | Element | TextEvent |
click | Yes | Yes | Element | MouseEvent |
dblclick | Yes | Yes | Element | MouseEvent |
mousedown | Yes | Yes | Element | MouseEvent |
mouseup | Yes | Yes | Element | MouseEvent |
mouseover | Yes | Yes | Element | MouseEvent |
mousemove | Yes | Yes | Element | MouseEvent |
mouseout | Yes | Yes | Element | MouseEvent |
keydown | Yes | Yes | Element | KeyboardEvent |
keyup | Yes | Yes | Element | KeyboardEvent |
mousemultiwheel | Yes | Yes | Document, Element | MouseMultiWheelEvent |
mousewheel | Yes | Yes | Document, Element | MouseWheelEvent |
DOMSubtreeModified | Yes | No | Document, DocumentFragment, Element, Attr | MutationEvent |
DOMNodeInserted | Yes | No | Element, Attr, Text, Comment, CDATASection, DocumentType, EntityReference, ProcessingInstruction | MutationEvent |
DOMNodeRemoved | Yes | No | Element, Attr, Text, Comment, CDATASection, DocumentType, EntityReference, ProcessingInstruction | MutationEvent |
DOMNodeRemovedFromDocument | No | No | Element, Attr, Text, Comment, CDATASection, DocumentType, EntityReference, ProcessingInstruction | MutationEvent |
DOMNodeInsertedIntoDocument | No | No | Element, Attr, Text, Comment, CDATASection, DocumentType, EntityReference, ProcessingInstruction | MutationEvent |
DOMAttrModified | Yes | No | Element | MutationEvent |
DOMCharacterDataModified | Yes | No | Text, Comment, CDATASection, ProcessingInstruction | MutationEvent |
DOMElementNameChanged | Yes | No | Element | MutationNameEvent |
DOMAttributeNameChanged | Yes | No | Element | MutationNameEvent |
load | No | No | Document, Element | Event |
unload | No | No | Document, Element | Event |
abort | Yes | No | Element | Event |
error | Yes | No | Element | Event |
select | Yes | No | Element | Event |
change | Yes | No | Element | Event |
submit | Yes | Yes | Element | Event |
reset | Yes | Yes | Element | Event |
resize | Yes | No | Document, Element | UIEvent |
scroll | Yes | No | Document, Element | UIEvent |
您可能感兴趣的文章:
相关文章推荐
- javascript 处理事件绑定的一些兼容写法
- javascript处理事件的一些兼容写法
- javascript处理事件的一些兼容写法
- javascript处理事件的一些兼容写法
- 【转载】JavaScript处理事件的一些兼容写法
- javascript处理事件的一些兼容写法
- javascript处理事件的兼容写法
- Javascript关于绑定事件方法attachEvent和addEventListener区别与兼容写法
- javascript浏览器兼容教程之事件处理
- [ javascript ] 关于addEventListener绑定事件的一些细节.
- javascript在大部分浏览器上兼容的事件代码写法
- 【原创翻译】深入理解javascript事件处理函数绑定三部曲(一)——早期的事件处理函数
- JavaScript移除绑定在元素上的匿名事件处理函数
- javascript中事件绑定的兼容性写法
- javascript中一些简单事件的处理
- javascript事件处理--关于事件的一些基础定义
- 处理事件的兼容写法
- javascript(六)js事件绑定浏览器兼容解决方案 attachEvent addEventListener
- DOM2级事件绑定的兼容处理
- 常见的原生javascript事件处理与浏览器兼容问题(下)