JS判断文本框内容改变事件的简单实例


Posted in Javascript onMarch 07, 2014

oninput,onpropertychange,onchange的用法

onchange触发事件必须满足两个条件:

a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效)

b)当前对象失去焦点(onblur);

onpropertychange的话,只要当前对象属性发生改变,都会触发事件,但是它是IE专属的;      

oninput是onpropertychange的非IE浏览器版本,支持firefox和opera等浏览器,但有一点不同,它绑定于对象时,并非该对象所有属性改变都能触发事件,它只在对象value值发生改变时奏效。

停止冒泡事件

if (e) //停止事件冒泡 e.stopPropagation();
else  window.event.cancelBubble = true;

执行上面的代码,单击输入框发现也会触发onpropertychange,输入一个值同样也会触发这个事件,这就证明了,只要有属性的值被修改就会触发该事件。

第二、既然我们发现了这个特点,那就会有一个问题了:当我们有时在输入框值发生改变时希望执行一个函数操作,但同时也要修改一个自定义的属性,这样onpropertychange就会被触发两次,这个可能并不是我们所希望的。
猜想一下,既然提供了这么一个属性,那一定应该能获取到是哪个属性被改变了。试着获取参数个数及参数内容。

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  
<script type="text/javascript">  
<!--   
document.getElementByIdx_x_x('xx').attachEvent('onpropertychange',function(){   
alert(arguments.length);   
for(var i=0;i<arguments.length;i++){   
alert(arguments[i]);   
}   
});   
-->  
</script> 

执行上面一段代码,会发现弹出了1和[object],这说明该事件只给回调函数传入一个参数而且是object类型。
那我们就试试遍历一下这个object。

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  
<script type="text/javascript">  
<!--   
document.getElementByIdx_x_x('xx').attachEvent('onpropertychange',function(o){   
for(var item in o){   
alert(item+":"+o[item]);   
}   
});   
//-->  
</script> 

执行一下,发现有很多个属性,但仔细看我们可能会发现这么一个属性:propertyname,相信每个人都能猜到这个属性的意思了。对,这个就是用来获取哪个属性被修改的。

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  
<script type="text/javascript">  
<!--   
document.getElementByIdx_x_x('xx').attachEvent('onpropertychange',function(o){   
alert(o.propertyName);   
});   
//-->  
</script> 

分别单击文本框和输入一个值,会发现分别弹出了myprop和value。

再回到我们开始的问题,我们只需要判断是否是value被改变就ok了。
直接看代码吧:

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  
<script type="text/javascript">  
<!--   
document.getElementByIdx_x_x('xx').attachEvent('onpropertychange',function(o){   
if(o.propertyName!='value')return;  //不是value改变不执行下面的操作   
//.......函数处理   
});   
//-->  
</script>
Javascript 相关文章推荐
Jquery中对数组的操作代码
Aug 12 Javascript
JavaScript中“基本类型”之争小结
Jan 03 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
javascript中利用柯里化函数实现bind方法
Apr 29 Javascript
js实现上传图片预览方法
Oct 25 Javascript
Vue动态组件实例解析
Aug 20 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
Sep 01 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
Mar 28 jQuery
vue+webpack 更换主题N种方案优劣分析
Oct 28 Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 #Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 #Javascript
jquery单行文字向上滚动效果示例
Mar 06 #Javascript
Javscript删除数组中指定元素并返回新数组
Mar 06 #Javascript
在Firefox下js select标签点击无法弹出
Mar 06 #Javascript
jquery选择器大全 全面详解jquery选择器
Mar 06 #Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
Mar 06 #Javascript
You might like
mysql limit查询优化分析
2008/11/12 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python3 logging日志封装实例
2020/04/08 Python
python中selenium库的基本使用详解
2020/07/31 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
怎样写留学自荐信
2013/11/11 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
小学教师节活动总结
2015/03/20 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
2015年暑假生活总结
2015/07/13 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang