要达到的效果
很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感。比如即时显示输入框已经被输入的字节数,或者即时读取输入的值来进行搜索引导,也就是google的关联搜索效果等
需要了解的知识
首先,我们需要了解onchange和onpropertychange的不同:
IE8下,当一个HTML元素的属性改变的时候,都能通过 onpropertychange来即时捕获。
onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件。
了解这一点后我们发现onpropertychange的效果就是我们想要的,可是很遗憾,它只在IE8以下有效果。我们能不能找到另外一个时间来代替onpropertychange呢?
经过翻阅资料得知,在其他浏览器下可以使用oninput事件来达到同样的效果,这样我们只需要把IE8以下浏览器区分出来就可以。
js判断IE浏览器的四种方法:
方法一:
if(window.addEventListener){
alert("not ie");
}else if(window.attachEvent){
alert("is ie");
}else{
alert("这种情况发生在不支持DHTML的老版本浏览器(现在一般都支持)")
}
注释:该方法在IE9及以上IE版本会弹出not ie结果
方法二:
if(document.all){
alert("IE");
}else{
alert("not ie");
}
方法三:
var navigatorName = "Microsoft Internet Explorer";
if( navigator.appName == navigatorName ){
alert("ie")
}else{
alert("not ie")
}
方法四:
利用了IE与标准浏览器在处理数组的toString方法的差异.对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它.
if(!+[1,])alert("这是ie浏览器");
else alert("这不是ie浏览器");
注释:IE8及以上版本会弹出“这不是IE浏览器”
判断常用浏览器的方法:
var explorer =navigator.userAgent ;
//ie
if (explorer.indexOf("MSIE") >= 0) {
alert("ie");
}
//firefox
else if (explorer.indexOf("Firefox") >= 0) {
alert("Firefox");
}
//Chrome
else if(explorer.indexOf("Chrome") >= 0){
alert("Chrome");
}
//Opera
else if(explorer.indexOf("Opera") >= 0){
alert("Opera");
}
//Safari
else if(explorer.indexOf("Safari") >= 0){
alert("Safari");
}
//Netscape
else if(explorer.indexOf("Netscape")>= 0) {
alert('Netscape');
}
到目前为止我们遇到的问题就已经解决了,开始写代码来实现功能。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js监听输入框值的即时变化</title>
</head>
<body>
<input type="text" id="text">
<div id="div"></div>
<script type="text/javascript">
var watch = function(){
var txt = inp.value;
div.innerHTML = txt;
}
var div = document.getElementById("div");
var inp = document.getElementById("text");
if(!+[1,]){
inp.onpropertychange = watch;
}else{
inp.oninput = watch;
}
</script>
</body>
</html>
