js监听文本框值变化事件,就oninput & onpropertychange & onkeyup & onchange的区别
在Web前端项目中实时监听文本框的值变化是非常常见的功能,通常最简单最容易想到的是onkeyup和onchange事件,但是在使用onkeyup来监听键盘事件的时候,监听不到鼠标右键的粘贴、复制的操作,在处理组合键的时候也比较麻烦,所以这篇文章简单介绍一下HTML5中的 oninput 和IE专属事件 onpropertychang 来解决监听文本框值变化。
这几个事件的说明和区别:
1、onkeyup:在键盘上某个按键按下后再松开时会触发。
2、onchange:此事件触发的条件有两个
1)、当前文本框属性变化,并且是通过键盘或者鼠标来触发的。(脚本触发的无效)
2)、当前文本框失去焦点(onblur)
3、onpropertychange:顾名思义,就是property(属性)change(改变)的时候,触发事件(对象改变任何属性的时候都会触发)。但是这个事件是IE专有的!,onpropertychange 会在设置了disable=true的时候失效,
4、oninput:该事件是处IE以外的大多数浏览器都支持的事件,只对该对象的value值改变的时候触发,是实时的。但是通过js改变的value 不会触发该事件。
在阻止冒泡事件时
e.stopPropagation() //用于firefox和chrome等其他浏览器。
e.cancelBubble = true //用于IE中阻止冒泡事件
你会发现,在你单击输入框的时候会触发onpropertychange,在你输入一个值的时候也会触发该事件,因此说明了在监听onpropertychange时 只要有属性发生变化就会触发该事件。
既然知道了这一点,我们会发现,当我们有的时候在文本框的值变化的时候我们希望改变一个自定义的属性值,这样地话onpropertychange就会触发两次,这个使我们不希望发生的。
那我们怎样才能知道我们改变的是哪个属性呢?不防我们试着获取一下onpropertychange的参数内容
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body> <input type="text" id="propertychang" value="文本" onclick="this.isprop = 'prop'"/> <script>
document.getElementById("propertychang").attachEvent("onpropertychange",function(){
console.log(arguments.length);
for(var i = 0; i < arguments.length; i++){
console.log(arguments[i]);
}
});
</script>
</body>
</html>
运行上边代码我们会发现输出了1和[object]如图:
说明该事件有一个参数而且是object类型,那么我们遍历一下这个object看看
代码:
<input type="text" id="propertychang" value="文本" onclick="this.isprop = 'prop'"/>
<script>
document.getElementById("propertychang").attachEvent("onpropertychange",function(obj){
for(var key in obj){
console.log(key + ":" + obj[key]);
}
});
</script>
输出如下:

我们发现会有好多属性,但是我们仔细查看会找到一个propertyName的属性,因此我们可以用此属性获取那个属性改变了所以我们可以这样写:
<input type="text" id="propertychang" value="文本" onfocus="this.isprop = 'prop'"/>
<script>
document.getElementById("propertychang").attachEvent("onpropertychange",function(obj){
if(obj.propertyName === "value"){
//自己的函数处理
}
});
</script>
写到这里这篇文章也就结束了,感谢大家的阅读。
js监听文本框值变化事件,就oninput & onpropertychange & onkeyup & onchange的区别的更多相关文章
- js监听文本框内容变化
js监听文本框内容变化 原理很简单,就是在外部先声明一个用来记录input值的变量,然后每0.1秒比较这个值与input的值,如果发生改变,则运行自己的代码,同时改变变量.从而实现对input值改变的 ...
- jQuery监听文本框值改变触发事件(propertychange)
完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- JS监听input框的回车事件、属性值改变事件
一.介绍 在程序猿门的工作中,经常会遇见一些表单数据的提交,对于有表单的东西而言,input输入框是非常常见的,所以对于一些input的基本事件,我们需要去掌握 二.input的监听enter事件 比 ...
- 实时监听input标签输入 实时监听文本框输入 避免中文输入法无法触发onkeyup事件的问题
前言: 对于实时监听输入,这种需求大多数都是用于一个联想字提醒,智能提醒.大家都知道onkeydown,onkeypress,onkeyup的在监听中文输入法或者右键粘贴的时候都存在一些弊端,不是那么 ...
- js监听文本框变化事件
用js有两种写法: 法一: <!DOCTYPE HTMl> <html> <head> <title> new document </title& ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- js 实时监听input中值变化
注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...
- 实时监听文本框输入 oninput、onchange与onpropertychange事件的用法和区别
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...
- 监听文本框输入oninput和onpropertychange事件
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...
随机推荐
- jmeter的使用---web测试
jmeter的使用---web测试 url:http://127.0.0.1:1080/WebTours/ 1.通过badboy录制脚本 1.1输入url点击右侧的跳转按钮,随后右侧显示url界面 1 ...
- DB主从一致性架构优化4种方法
需求缘起 大部分互联网的业务都是"读多写少"的场景,数据库层面,读性能往往成为瓶颈.如下图:业界通常采用"一主多从,读写分离,冗余多个读库"的数据库架构来提升数 ...
- junit初探
由于公司规模不大,所以测试方面一直不是很正规,都是做完一个功能,稍微测试一下,没有做单元测试,所以自然也没有接触过类似于junit这类测试的工具. 今天有空研究了一下junit,顾名思义,这是给jav ...
- 自学Zabbix3.10.1.1-事件通知Notifications upon events-媒介类型email
自学Zabbix3.10.1.1-事件通知Notifications upon events-媒介类型email 配置媒介Email Administration→Media types->Cl ...
- 自学Zabbix3.7-事件Event
配置item.trigger.都是为发送报警做准备的,什么是事件通知呢?简单的说故障发生了,zabbix会发邮件或者短信给你,告诉你服务器的一些状况. 1. 通知条件 发送通知,需要有如下步骤 定义一 ...
- Vue-Methods中使用Filter
1.Vue中Filter声明方式 Vue中存在两种声明Filter过滤器的方式: 1.全局过滤器 Vue.filter('testFilter1',function(val){ console.log ...
- 《软件测试的艺术(原书第2版)》【PDF】下载
<软件测试的艺术(原书第2版)>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196343 内容简介 本书以一次自评价测试开篇,从软 ...
- JDBC结果集rs.next()注意事项
写在前面: 用JDBC从数据库中查询数据要用到结果集ResultSet,其中我们在获取结果的时候经常用到rs.next()方法来判断是否查询到了数据. 但是要特别注意,next()方法用一次,游标就往 ...
- 【Jenkins】通过ANT构建JMeter任务时提示找不到jtl文件时的解决方法
- 【ANT】时间戳
属性 说明 举例 DSTAMP 设置为当前日期,默认格式:yyyymmdd 20170309 TSTAMP 设置为当前时间,默认格式:hhmm 2007 TODAY 设置为当前日期,带完整的月份 Ma ...