1. 程式人生 > >實時監聽input輸入的變化(相容主流瀏覽器)

實時監聽input輸入的變化(相容主流瀏覽器)

【轉載】監聽輸入框的值,一般通過onchange/onkeyup/onkeypress/onkeydown實現,但是這存在著一些不好的使用者體驗。比如onchange事件只在鍵盤或者滑鼠操作改變物件屬性,且失去焦點時觸發,指令碼觸發無效;而onkeydown/onkeypress/onkeyup在處理複製、貼上、拖拽、長按鍵(按住鍵盤不放)等細節上並不完善。
onpropertychange屬性可在某些情況下解決上面存在的問題,不用考慮是否失去焦點,不管js操作還是鍵盤滑鼠手動操作,只要HTML元素屬性發生改變即可立即捕獲到。遺憾的是,onpropertychange為IE專屬的。其他瀏覽器下如果想要實現這一實時監聽的需求,就要用到

HTML5中的標準事件oninput,不過IE9以下的瀏覽器是不支援oninput事件的。

問題

實時監聽input輸入框的值

解決

由於專案HTML5支援也不是很友好,所以考慮使用onchange和onpropertychange來實現監聽輸入框的值。所以,還要先判斷瀏覽器!!

舉個栗子:

判斷瀏覽器版本:

//判斷非IE8及以下版本
	var  ieTrue = true;
	var browser=navigator.appName;		
	var b_version=navigator.appVersion;	
	var version=b_version.split(";");
	if(version != "5.0 (Windows)"){
		var trim_Version=version[1].replace(/[ ]/g,""); 		
	}else{
		var trim_Version="firefox"; 
	}
	if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0") 
	{ 
		ieTrue = false;
	} 
	else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE7.0") 
	{ 
		ieTrue = false;
	} 
	else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE8.0") 
	{ 
		ieTrue = false;
	} 
	else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE9.0") 
	{ 
		ieTrue = true;
	}
	else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE10.0") 
	{ 
		ieTrue = true;
	}
	else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE11.0") 
	{ 
		ieTrue = true;
	}else{
		ieTrue = true;
	}

監聽
	function myFunction(){
			$("input[class='reorder']").each(function(){
				if(ieTrue == false){//ie8及以下  			
		  			this.attachEvent('onpropertychange', function(e){
		  				if(!$(this).is(":focus")){
		  					if(e.propertyName == 'value'){
		  						$(this).attr("value",function(){//改變值後要觸發的程式碼
		  							return $(this).val();					
		  						});
		  	  				}
		  				}
		  			});
		  	    }else {//非ie和IE9以上
	  	    		$(this).attr("value",function(){//改變值後要觸發的程式碼
 					return $(this).val();	
  	              	}
		  	    }  		
		})	
		}