【转载】监听输入框的值,一般通过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();
}
}
})
}
本文探讨了在不同浏览器中实时监听input输入值的挑战,包括onchange、onpropertychange和oninput事件的局限性。针对IE浏览器的onpropertychange特性以及HTML5的oninput事件,提出了兼容性解决方案,确保在各种环境下都能有效监听输入框内容的实时变化。
3824

被折叠的 条评论
为什么被折叠?



