【轉載】監聽輸入框的值,一般通過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();
}
}
})
}