跨所有浏览器的event事件工具类

/**
 *跨所有浏览器的event事件工具类
 */
var EventUtil={
	//增加事件
	/**
	 * element 要操作的元素,事件名称,事件处理程序函数
	 */
	addHandler:function(element,type,handler){
		if(element.addEventListener){//DOM2
			element.addEventListener(type,handler,false);
		}else if(element.attachEvent){//IE
			element.attachEvent("on"+type,handler);
		}else{//DOM0
			element["on"+type] = handler;
		}
	},
	/**
	 * element 要操作的元素,事件名称,事件处理程序函数
	 */
	removeHandler:function(element,type,handler){
		if(element.removeEventListener){//DOM2
			element.removeEventListener(type,handler,false);
		}else if(element.detachEvent){//IE
			element.detachEvent("on"+type,handler);
		}else{//DOM0
			element["on"+type] = null;
		}
	},
	/**
	 *  获得event对象 window.event(IE)
	 */
	getEvent:function(event){
		return event?event:window.event;
	},
	/**
	 * 获得目标对象 srcElement(IE)
	 */
	getTarget:function(event){
		return event.target||event.srcElement;
	},
	/**
	 * 阻止特定事件的默认行为,例如阻止超链接的默认行为
	 */
	preventDefault:function(event){
		if(event.preventDefault){//DOM事件
			event.preventDefault();
		}else{//IE
			event.returnValue=false;
		}
	},
	/**
	 * 停止进一步的事件捕获或者冒泡
	 */
	stopPropagation:function(){
		if(event.stopPropagation){//DOM事件
			event.stopPropagation();
		}else{//IE
			event.cancelBubble == true;
		}
		
	},
	/**
	 *mouseover,mouseout  失去光标元素和获得光标元素
	 * @param event
	 * @returns
	 */
	getRelatedTarget:function(event){
		if(event.relatedTarget){//DOM
			return event.relatedTarget;
		}else if(event.toElement){//IE mouseover
			return event.toElement;
		}else if(event.fromElement){//IE mouseout
			return event.fromElement;
		}else{
			return null;
		}
	},
	/**
	 * DOM中 0==鼠标左键 1==鼠标中间的滑轮 2==鼠标右键
	 * IE中要对8中按钮属性值进行规范处理
	 * @param event
	 * @returns
	 */
	getButton:function(event){
		if(document.implementation.hasFeature("MouseEvents", "2.0")){//DOM
			return event.button;
		}else{//IE
			switch(event.button){
				case 0:
				case 1:
				case 3:
				case 5:
				case 7:
					return 0;
				case 2:
				case 6:
					return 2;
				case 4:
					return 1;
			}
		}
	},
	/**
	 * 获得键盘的ASCII码,可通过String.fromCharCode();转换成实际的字符
	 */
	getCharCode:function(event){
		if(typeof event.charCode ==  "number"){//FF ,Chrome,safari
			return event.charCode;
		}else{//IE Opera
			return event.keyCode;
		}
	},
	/***
	 * 获得鼠标滚轮的增量值 默认120
	 */
	getWheelDeta:function(event){
		if(event.wheelDelta){
			return (client.engine.opera&&client.engine.opera<9.5?-event.wheelDelta:event.wheelDelta);
		}else{//FF
			return -event.detail*40;
		}
	},
	/**
	 * element仅限于哪些可以用鼠标选择文本的 textarea ,input之类的控件.获得选择的文本内容
	 * @param element
	 */
	getSelectedText:function(element){
		if(document.selection){//IE
			return document.selection.createRange().text;
		}else{
			return element.value.substring(element.selectionStart,element.selectionEnd);
		}
	},
	/**
	 * 设置选择文本
	 * @param textbox
	 * @param startIndex
	 * @param stopIndex
	 */
	setSelectText:function(textbox,startIndex,stopIndex){
		if(textbox.setSelectionRange){
			textbox.setSelectionRange(startIndex,stopIndex);
		}else if(textbox.createTextRange){
			var range=textbox.createTextRange();
			range.collapse();
			range.moveStart("character",startIndex);
			range.moveEnd("character",stopIndex-startIndex);
			range.select();
		}
		textbox.focus();
	},
	/**
	 * 屏蔽键盘上输入非数值字符 firefox 非字符键触发的keypress时间对于字符编码0,ksafari3,则对于8
	 * @param event
	 */
	preventNotNumber:function(event){
		event=this.getEvent(event);
		var target=this.getTarget(event);
		var charCode=this.getCharCode(event);
		if(!/\d/.test(String.fromCharCode(charCode))&&charCode>9&&!event.ctrlKey){
			this.preventDefault(event);
		}
		
	},
	/**
	 * 获得粘贴板内容 
	 * @param event
	 * @returns
	 */
	getClipboardText:function(event){
		var clipboardData=(event.clipboardData || window.clipboardData);
		return clipboardData.getData("text");
	},
	/**
	 * 设置粘贴板内容
	 * @param event
	 * @returns
	 */
	setClipboardText:function(event){
	    if(event.clipboardData){//safari,chrome
	    	return event.clipboardData.setData("text/plain",value);
	    }else if(window.clipboardData){//IE
	    	return window.clipboardData.setData("text");
	    }
	},
	/**
	 * 自动切换焦点,<input type="text" id="textTel1" maxlength="3"/>
	 * EventUtil.addHandler("textbox1","keyup",tabForward)
	 */
	tabForward:function(event){
		event=this.getEvent(event);
		var target=this.getTarget(event);
		if(target.value.length == target.maxLength){
			var form = target.form;
			for(var i=0,len=form.elements.length;i<len;i++){
				if(form.elements[i]==target){
					form.elements[i+1].foucs();
					return;
				}
			}
		}
	},
	/**
	 * 序列化form表单
	 */
	serializeForm:function(form){
		var parts=new Array();
		var field=null;
		for(var i=0,len=form.elements.length;i<len;i++){
			field=form.elements[i];
			switch(field.type){
			case "select-one":
			case "select-multiple":
			   for(var j=0,oplen=field.options.length;j<oplen;j++){
				   var option=field.options[j];
				   if(option.selected){
					   var optValue="";
					   if(option.hasAttribute){
						   optValue=option.hasAttribute("value")?option.value:option.text;
					   }else{
						   optValue=option.attributes["value"].specified?option.value:option.text;
					   }
					   parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(optValue));
				   }
			   }
			  break;
			  
			case undefined:
			case "file":
			case "submit":
			case "reset":
			case "button":
				break;
			case "radio":
			case "checkbox":
				if(!field.checked){
					break;
				}
			default:
				parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(field.value));
			}
		}
		return parts.join("&");
	},
	contains:function(refNode,otherNode){
		   if(typeof refNode.contains == "function" && (!client.engine.webkit||client.engine.webkit>=522)){
			   return refNode.contains(otherNode);
		   }else if(typeof refNode.compareDocumentPostion=="function"){
			   return !!(refNode.compareDocumentPostion(otherNode)&16);
		   }else{
			   var node=otherNode.parentNode;
			   do{
				   if(node==refNode){
					   return true;
				   }else{
					   node=node.parentNode;
				   }
			   }while(node!==null)
			   return false;
		   }
	   }
	   
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值