實時監聽input輸入的變化(相容主流瀏覽器)
阿新 • • 發佈:2019-01-02
【轉載】監聽輸入框的值,一般通過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(); } } }) }