在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的区别的更多相关文章

  1. js监听文本框内容变化

    js监听文本框内容变化 原理很简单,就是在外部先声明一个用来记录input值的变量,然后每0.1秒比较这个值与input的值,如果发生改变,则运行自己的代码,同时改变变量.从而实现对input值改变的 ...

  2. jQuery监听文本框值改变触发事件(propertychange)

    完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  3. JS监听input框的回车事件、属性值改变事件

    一.介绍 在程序猿门的工作中,经常会遇见一些表单数据的提交,对于有表单的东西而言,input输入框是非常常见的,所以对于一些input的基本事件,我们需要去掌握 二.input的监听enter事件 比 ...

  4. 实时监听input标签输入 实时监听文本框输入 避免中文输入法无法触发onkeyup事件的问题

    前言: 对于实时监听输入,这种需求大多数都是用于一个联想字提醒,智能提醒.大家都知道onkeydown,onkeypress,onkeyup的在监听中文输入法或者右键粘贴的时候都存在一些弊端,不是那么 ...

  5. js监听文本框变化事件

    用js有两种写法: 法一: <!DOCTYPE HTMl> <html> <head> <title> new document </title& ...

  6. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  7. js 实时监听input中值变化

    注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...

  8. 实时监听文本框输入 oninput、onchange与onpropertychange事件的用法和区别

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...

  9. 监听文本框输入oninput和onpropertychange事件

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...

随机推荐

  1. ABP入门系列(21)——切换MySQL数据库

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framewo ...

  2. 八、 Spring Boot 过滤器、监听器

    直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener.过滤器(Filter)文件MyFilter.Javapackage org.springb ...

  3. linux 安装tensorflow(gpu版本)

    一.安装cuda 具体安装过程见我的另一篇博客,ubuntu16.04下安装配置深度学习环境 二.安装tensorflow 1.具体安装过程官网其实写的比较详细,总结一下的话可以分为两种:安装rele ...

  4. android studio 使用adb命令传递文件到android设备

    一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...

  5. IntelliJ IDEA 设置Output (输出窗口)窗口字体大小

    Settings-->Editor-->Colors&Fonts-->Console Font 如图: 字体调好了以后使用起来眼睛就轻松多了

  6. oracle如何连接别人的数据库,需要在本地添加一些配置

    2.oracle如何连接别人的数据库,需要在本地添加一些配置 1.找到 listener.ora 文件,打开(一般在 C 文件夹) ORCL = (DESCRIPTION = (ADDRESS = ( ...

  7. css自动添加浏览器兼容前缀 autoprefixer设置

    Autoprefixer设置: preferences>key Bindings-Users {"keys":["ctrl+alt+x"],"c ...

  8. vue2.0---vue-router总结(项目基于vue-cli)

    vue2.0---vue-router总结(项目基于vue-cli) 1. 在项目中安装: npm install vue-router --save 2. 在项目中的引入: // The Vue b ...

  9. spring-boot学习笔记之Conditional

    今天看了@Conditional,自己根据以下文章练了下,根据自己的理解操作的             转载出处:http://wiselyman.iteye.com/blog/2213054 17. ...

  10. JavaScript--AJAX页面传值

    1.首先 闲话不说 直接代码走起,都是我工作闲事的积累干货 //重要 js 运行 $(function (){ 代码 }); 2.ajax 传值 //第一种 输入框 <input type=&q ...