本文转自: http://www.jb51.net/article/60789.htm,
http://www.cnblogs.com/xiaoxianweb/p/6387255.html,
http://www.cnblogs.com/lhb25/archive/2012/11/30/oninput-and-onpropertychange-event-for-input.html
本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法。
A:项目中下拉框里自动匹配关键字,具体细节是实时监听文本框 value 值的变化,然后匹配相关内容。
首先想到的是 JQ 里的 change,但是马上排除此方法,因为 change 是在文本框失去焦点时才会触发。
用 keydown 来解决。只是当不通过键盘操作,而是通过鼠标来复制粘贴时,这个事件是无法触发的。所以这个方法也排除掉了。
然后,查询了一些相关资料,发现只有原生 js 的 oninput & onpropertychange 符合此要求,但是 bind 确实会绑定类似的事件,那便是 input & propertychange,通过测试,确实是没问题的。
现在将例子奉上:
JQ:
|
$( 'input' ).bind( 'input propertychange' , function () {
//code
});
|
其中:propertychange 是为了兼容 IE9 以下版本的。
JS中的 oninput 事件在 IE9 以下版本不支持,需要使用 IE 特有的 onpropertychange 事件替代,这个事件在用户界面改变或者使用脚本直接修改内容两种情况下都会触发,有以下几种情况:
修改了 input:checkbox 或者 input:radio 元素的选择中状态, checked 属性发生变化。
修改了 input:text 或者 textarea 元素的值,value 属性发生变化。
修改了 select 元素的选中项,selectedIndex 属性发生变化。
JS:
1
2
3
4
5
6
7
8
|
if (isIE)
{
document.getElementById( "input" ).onpropertychange = keys();
}
else //需要用addEventListener来注册事件
{
document.getElementById( "input" ).addEventListener( "input" , keys, false );
}
|
B:文本框输入监听事件一个文本框,一个按钮,当文本框输入内容时,按钮可用,当删除内容时,按钮不可用。
刚开始用的focus和blur,
$(".pay-text").focus(function(){
$(".pay-btn").attr("disabled",false);
});
$(".pay-text").blur(function(){
$(".pay-btn").attr("disabled",true);
});
自然是不行的,文本框获得焦点后,按钮不可用,要输入进内容,按钮才可用。又试了keyup
事件
$(".pay-text").keyup(function(){
$(".pay-btn").attr("disabled",false);
});
输入是实现了,但是当把输入的内容删除时,按钮不可用没有实现。加入if判断
if($(this).val==""){
$(".pay-btn").attr("disabled",true);
}
else{
$(".pay-btn").attr("disabled",false);
}
ie8以下是不支持的,IE9以下用propertychange 兼容 IE9 以下版本的。还好我这个项目只在移动端使用,于是最后的代码为:
html:
<input type="text" class="pay-text" placeholder="输入金额" οninput="moneyChange(this)">
<input type="button" class="pay-btn" value="确认 "disabled="disabled">
js:
function moneyChange(e){
var money=$(e).val();
$(".pay-btn").attr("disabled",false);
if(money==""){
$(".pay-btn").attr("disabled",true);
}
};
汇总onchange onpropertychange 和oninput事件的区别: