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

本文探讨了在不同浏览器中实时监听input输入值的挑战,包括onchange、onpropertychange和oninput事件的局限性。针对IE浏览器的onpropertychange特性以及HTML5的oninput事件,提出了兼容性解决方案,确保在各种环境下都能有效监听输入框内容的实时变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值