oninput和onpropertychange实时监听输入框值的变化
oninput和onpropertychange实时监听输入框值的变化
传统监听输入框的做法就是使用keyup、keydown、keypress,或者change事件来实现,但keyup、keydown、keypress事件是只要完成击键事件后就触发,不考虑输入框的值是否变化,也监听不了使用鼠标右键[剪贴]和[粘贴]这些操作,更监听不了使用JS动态改变值的变化。而change事件必须是焦点离开输入框后才触发,并不能实时监听。所以这几个事件来监听输入框值变化并不完美。ie浏览器(ie6-8)可以直接使用onpropertychange事件来实时监听(包括JS动态改变值),而标准浏览器(包括IE9+)可以使用HTML5薪增的oninput事件来监听,但是oninput并不能监听JS动态改变的值,网上虽然有很多方面的资料,很是很多都没有讲到监听JS动态改变值,碰巧今天同事做手机端碰到这个问题问到我,所以就总结了下!
JSFiddler效果如下:
你可以狠狠的点击这里:监听输入框值的变化
IE下onpropertychange实时监听输入框值的变化
首先我们可以做个简单的demo来测试下,代码如下:
HTML代码:
<h2>IE6-8监听输入框值的变化--onpropertychange事件,可以监听到js动态设置值</h2>
<input type="text" id="input" />
<div id="value" style="width:100%;height:30px;border:1px solid red;margin:10px 0"></div>
JS代码:
// 兼容IE下(IE6-8) 键盘事件 IE9不支持此事件
$("#input").bind("propertychange",function(e){
var value = $(e.target).val();
$("#value").html(value);
});
// 兼容IE下 动态改变输入框值 是否监听到?
$("#input").val("11");
onpropertychange监听的是元素的property属性,并不只局限于value,也可以监听其他标准属性值,如:input的name值,效果可以看JSfiddler上面的链接。
标准浏览器下oninput实时监听输入框值的变化
HTML代码如下:
<!-- IE9+标准浏览器 -->
<h2>标准浏览器监听输入框值的变化--oninput事件,不能监听到js动态设置值,但是可以监听到键盘事件值的变化</h2>
<input type="text" id="input2" />
<div id="value2" style="width:100%;height:30px;border:1px solid red;margin:10px 0"></div>
JS代码如下:
// 兼容标准浏览器 chrome firefox IE9+等 但是动态设置值并不支持
$("#input2").bind('input',function(e){
var value = $(e.target).val();
$("#value2").html(value);
});
// 兼容标准浏览器下 动态改变输入框值 是否监听到?
$("#input2").val("11");
标准浏览器下使用oninput事件也可以监听输入框值的变化,但是他和IE的onpropertychange事件有点不同:
oninput不能监听JS动态改变的属性或者值。特别是想在移动开发上使用这个事件,但是纠结的不能监听到这个事件。
使用定时器功能来监听各个浏览器输入框值的变化(包括JS动态改变值或者属性)。
HTML代码如下:
<h2>下面是对浏览器做兼容性处理,使用定时器</h2>
<input type="text" id="input3" />
<div id="value3" style="width:100%;height:30px;border:1px solid red;margin:10px 0"></div>
JS代码如下:
// 兼容各个浏览器下
var timer = 0,
curVal = "";
$("#input3").bind("propertychange input",function(e){
if(timer){
clearInterval(timer);
timer = 0;
}
curVal = $(e.target).val();
$("#value3").html(curVal);
interval();
}); function interval(){
timer = setInterval(function() {
if (curVal != $("#input3").val()) {
curVal = $("#input3").val();
$("#value3").html($("#input3").val());
}
}, 100);
}
interval();
// 兼容各个浏览器下 动态改变输入框值
$("#input3").val("11");
如上,使用定时器去不断检测值是否和当前值是否相等。
模拟valuechange事件变化,监听input,textarea等之前值,之后值得变化。
valuechange事件是自定义事件的,有上面的监听当前值改变,为什么还要这个事件呢?那是因为比如输入框或者文本域,我想监听输入框之前的值和现在的值得话,那么上面的方法不好监听,监听不到,所以就再次封装了下,可以实时监听input或者textarea等之前值和之后值得功能。
思路:正常的情况下还是和上面一样 用这两个事件 propertychange input 就可以监听键盘操作的事件了,但是标准浏览器对input事件,比如动态改变值得时候 监听不到,所以用了一个定时器不断的检测,如果值不相等的话,那么就执行回调函数,返回之前的值和之后的值。下面我们可以先看看jsFiddler效果吧!
你可以狠狠的点击这里: valueChange事件动态监听输入框input或者textarea之前值和现在值得变化!
下面是基本的HTML代码如下:
<h2>下面是对浏览器做兼容性处理,使用定时器</h2>
<input type="text" id="input3" />
<div id="value3" style="width:100%;height:30px;border:1px solid red;margin:10px 0"></div>
<div class="clickme" data-value="11">点击我1,我的值为11</div>
<div class="clickme" data-value="22">点击我2,我的值为22</div>
JS代码如下:
function valuechange(element,callback) {
var timer = 0,
prevVal = $(element).val();
timer = 0;
if(timer){
clearInterval(timer);
timer = 0;
}
timer = setInterval(function(){
if(prevVal != $(element).val()) {
if(prevVal == '') {
prevVal = undefined;
}
callback(prevVal,$(element).val());
prevVal = $(element).val();
}
},100);
$(element).bind("propertychange input",function(e){
if(prevVal != $(e.target).val()) {
if(prevVal == '') {
prevVal = undefined;
}
callback(prevVal,$(e.target).val());
prevVal = $(e.target).val();
}
});
}
valuechange('#input3',function(prev,cur){
$("#value3").html("之前的值是:"+prev+"当前的值"+cur);
});
// 动态js设置值
$(".clickme").click(function(e){
var value = $(e.target).attr("data-value");
$("#input3").val(value);
});
oninput和onpropertychange实时监听输入框值的变化的更多相关文章
- javascript --- 实时监听输入框值的变化
实时监听文本框值变化是非常常见的功能,通常最简单的办法就是用keyup,keydown来实现,但是这种方法有两个问题,一个是当直接复制粘贴的时候没法监听到事件,另外一个问题是在移动端,使用删除键删除输 ...
- 实时监听输入框值变化的完美方案:oninput & onpropertychange
实时监听输入框值变化的完美方案:oninput & onpropertychange: 网址:http://www.cnblogs.com/lhb25/archive/2012/11/30/o ...
- js与jquery实时监听输入框值的oninput与onpropertychange方法
文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时监 ...
- 移动端用js与jquery实时监听输入框值的改动
背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android ...
- js与jquery实时监听输入框值变化方法
本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...
- jquery实时监听输入框值变化
在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能满足条 ...
- Js/jQuery实时监听输入框值变化
前言 在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能 ...
- 实时监听输入框值变化:oninput & onpropertychange
结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. oninput 是 HTML5 的标准事件,对于检测 textarea, i ...
- html5 实时监听输入框值变化的完美方案:oninput & onpropertychange
结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. H5手机端: <input type="text" ...
随机推荐
- 漫画 | Java多线程与并发(一)
1.什么是线程? 2.线程和进程有什么区别? 3.如何在Java中实现线程? 4.Java关键字volatile与synchronized作用与区别? volatile修饰的变量不保留拷贝,直接访问主 ...
- 悟空模式-java-建造者模式
[此是锻炼神冰铁,磨琢成工光皎洁.老君自己动钤锤,荧惑亲身添炭屑.五方五帝用心机,六丁六甲费周折.造成九齿玉垂牙,铸就双环金坠叶.身妆六曜排五星,体按四时依八节.短长上下定乾坤,左右阴阳分日月.六爻神 ...
- HDU3622(二分+2-SAT)
Bomb Game Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- vue中的js引入图片,必须require进来
需求:如何components里面的index.vue怎样能把assets里面的图片拿出来. 1.在img标签里面直接写上路径: <img src="../assets/a1.png& ...
- [TJOI2015]弦论
我们先求出该字符串的\(SA\)和\(Ht\) 然后分类讨论 \(T=0\)时,每次去掉\(Ht\)往后扫就行 \(T=1\)时,我们考虑\(lcp\)对答案的影响 既然用到\(lcp\),那就要用\ ...
- JPEG/PNG/GIF图片格式简析
JPEG/PNG/GIF是Web浏览器广泛支持的3种图片格式. 1.JPEG格式最适合保存照片和其他复杂图像. 2.GIF和PNG格式最适合保存logo和其他包含单色.线条.文本的简单图形. 3.JP ...
- 【代码笔记】iOS-UIActionSheet字体的修改
一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...
- TNS-12549问题分析及解决办法
该服务器启动监听时候报错因为最后一句是Linux Error:No space left on device 因为是LINUX Error,所以可以到/var/log/messages里查看具体报错信 ...
- 大数据【七】HBase部署
接着前面的Zookeeper部署之后,现在可以学习HBase了. HBase是基于Hadoop的开源分布式数据库,它以Google的BigTable为原型,设计并实现了具有高可靠性.高性能.列存储.可 ...
- 【转】设置Qt应用程序图标及应用程序名
一直以来很纠结给qt应用程序添加图标问题,在网上收过一次,但是感觉不够完整,现将自己的实现过程记录下,以便以后查看: 通过网上的例子知道qt助手中有相关说明: Setting the Applicat ...