中⽂输⼊法不触发onkeyup事件的解决办法
这两天做⼀个需要实时监控⽂本框输⼊的功能,碰到了中⽂输⼊法⽆法触发onkeyup事件的恶⼼问题。
具体表现是这样的:
当监听⼀个input的keyup的事件的时候,英⽂输⼊法的情况下可以实时的通过keyup事件检测到⽂本框value的变化,但是当输⼊法变成中⽂后,input的keyup事件就不会被正常触发。这是最先前的写法。
<html>
<head>
<script type="text/javascript" src="www.jb51/static/js/jquery-1.4.2.min.js"></script>
</head>
<body>
<p>
使⽤keyup事件检测⽂本框内容:
</p>
<p>
<input type="text" name="keyup_i" id="keyup_i" autocomplete="off"/>
<span id="keyup_s"></span>
<script type="text/javascript">
$('#keyup_i').bind('keyup', function(){
$('#keyup_s').text($(this).val());
})
</script>
</p>
</body>
</html>
如你所见,这样的写法遇到了中⽂不能触发keyup事件的问题。于是寻求解决⽅法,想起来baidu的搜索栏提⽰似乎是没有这个问题的,于是开始看百度的js。百度的js⽐较难看...⽅法命名净是⼀个字母,最后发现⼤概是使⽤了timeout做⼀个定时器来定时监测input框的修改。不是很满意这样的⽅法。于是继续查看有没有更好的解决办法,于是就到了oninput和onpropertychange两个事件。
oninput是firefox下⾯可⽤,⽽onpropertychange则是ie下可⽤。两个⽅法有着⼀些区别。
oninput只能检测到value这个属性的变化,⽽onpropertychange则可以检测到包含value的所有属性的变化。于是开始改成这个样⼦。
<html>
<head>
<script type="text/javascript" src="www.jb51/static/js/jquery-1.4.2.min.js"></script>
</head>
<body>
<p>
使⽤oninput以及onpropertychange事件检测⽂本框内容:
</p>
<p>
<input type="text" name="inputorp_i" id="inputorp_i" autocomplete="off"/>
<span id="inputorp_s"></span>
<script type="text/javascript">
//先判断浏览器是不是万恶的IE,没办法,写的东西也有IE使⽤者
var bind_name = 'input';
if (navigator.userAgent.indexOf("MSIE") != -1){
bind_name = 'propertychange';
input框禁止输入
}
$('#inputorp_i').bind(bind_name, function(){
$('#inputorp_s').text($(this).val());
})
</script>
</p>
</body>
</html>
问题这么被解决了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。