实时监听input输入的变化(兼容主流浏览器)

来源:互联网 发布:越南人 知乎 编辑:程序博客网 时间:2024/06/07 08:58

【转载】监听输入框的值,一般通过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();                }      }  })}










原创粉丝点击