js监听输入框值的即时变化onpropertychange、oninput


Posted in Javascript onJuly 13, 2011

要达到的效果
很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感。比如即时显示输入框已经被输入的字节数,或者即时读取输入的值来进行搜索引导,也就是google的关联搜索效果等。
只要我们能捕获即时事件就能做到很多事情。
需要了解的知识
首先,我们需要了解onchange和onpropertychange的不同:
IE下,当一个HTML元素的属性改变的时候,都能通过 onpropertychange来即时捕获。
onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件。
了解这一点后我们发现onpropertychange的效果就是我们想要的,可是很遗憾,它只在IE下有效果。我们能不能找到另外一个时间来代替onpropertychange呢?
经过翻阅资料得知,在其他浏览器下可以使用oninput事件来达到同样的效果,真是太好了,我们只需要把IE浏览器区分出来就可以。
oninput的使用
下面我们先了解一下oninput如何使用。

如果您是将注册时间直接写在页面里面,那么如下写法就可以实现:
<input type="text" name="textfield" oninput="alert(this.value);" onpropertychange="alert(this.value)" />
但是,将oninput写在JS代码中分离出来时与普通事件注册的方法有些不同,必须使用addEventListener来注册。
attachEvent和addEventListener 的不同
说到这里我们再来了解一下 attachEvent和addEventListener 的使用方法:
attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
addEventListener方法 用于 Mozilla系列
举例:
document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;
如果这样写,那么将会只有medhot3被执行
写成这样:
var btn1Obj = document.getElementById("btn1");
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);
执行顺序为method3->method2->method1
如果是Mozilla系列,并不支持该方法,需要用到addEventListener
var btn1Obj = document.getElementById("btn1");
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);
执行顺序为method1->method2->method3
了解了如何使用addEventListener来注册oninput事件后我们再回到要解决的问题[划分浏览器]。
判断IE浏览器
如何将IE区分出来呢?
这似乎是一个老生常谈的问题,网络中有很多找那个方法,归类为两类:
其一,是判断浏览器的功能属性。
其二,就是判断传统的 user-agent 字符串,这可能是最古老也是最流行的检测方式。
在这里就不做深入了解了,我们这里用一种比较简单的方法来判断

if("\v"=="v") { 
alert("IE"); 
}else{ 
alert("NO"); 
}

到目前为止我们遇到的问题就已经解决了,开始写代码来测试我们的思路是否能够实现。
完成代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<meta name="auther" content="fq" /> 
<title>监听输入框值的即时变化 onpropertychange oninput</title> 
<script type="text/javascript"> 
function immediately(){ 
var element = document.getElementById("mytext"); 
if("\v"=="v") { 
element.onpropertychange = webChange; 
}else{ 
element.addEventListener("input",webChange,false); 
} 
function webChange(){ 
if(element.value){document.getElementById("test").innerHTML = element.value}; 
} 
} 
</script> 
</head> 
<body>

直接写在页面中的示例:
<input type="text" name="textfield" oninput="document.getElementById('webtest').innerHTML=this.value;" onpropertychange="document.getElementById('webtest').innerHTML=this.value;" /> 
<div>您输入的值为:<span id="webtest">还未输入</span></div> 
<br /><br /><br /><br /><br /> 
写在JS中的示例: 
<input type="text" name="textfield" id="mytext" /> 
<div>您输入的值为:<span id="test">还未输入</span></div> 
<script type="text/javascript"> 
immediately(); 
</script> 
</body> 
</html>

太漂亮了,一次完成,预览以上代码,页面中共实现两两种方式:第一、页面中直接引用;第二、JS中引用。
经过测试,兼容:IE6、IE7、IE8、Firefox、Opera、Chrome、Safari
Javascript 相关文章推荐
javascript 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
Nov 21 Javascript
深入理解Javascript里的依赖注入
Mar 19 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
js实现动态显示时间效果
Mar 06 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
jQuery实现弹出层效果
Dec 10 jQuery
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
用Angular实现一个扫雷的游戏示例
May 15 Javascript
Vue 数据响应式相关总结
Jan 28 Vue.js
js 判断脚本加载完毕的代码
Jul 13 #Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
Jul 13 #Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 #Javascript
JS模拟面向对象全解(二、类型与赋值)
Jul 13 #Javascript
JS模拟面向对象全解(一、类型及传递)
Jul 13 #Javascript
一些实用的jQuery代码片段收集
Jul 12 #Javascript
formValidator3.3的ajaxValidator一些异常分析
Jul 12 #Javascript
You might like
用PHP实现小型站点广告管理
2006/10/09 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
Javascript - HTML的request类
2007/01/09 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
vue写h5页面的方法总结
2019/02/12 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python实现弹窗祝福效果
2019/04/07 Python
Python pandas用法最全整理
2019/08/04 Python
python序列化与数据持久化实例详解
2019/12/20 Python
Python map及filter函数使用方法解析
2020/08/06 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
会计电算化专业自荐信
2014/03/15 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
春季运动会开幕词
2015/01/28 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
紧急迫降观后感
2015/06/15 职场文书
初中生活随笔
2015/08/15 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书