中文输入法无法触发onkeyup事件的问题

Type: 技术相关 - Posted at: 2010/07/24 13:54

这两天做一个需要实时监控文本框输入的功能,碰到了中文输入法无法触发onkeyup事件的恶心问题。

具体表现是这样的:

当监听一个input的keyup的事件的时候,英文输入法的情况下可以实时的通过keyup事件检测到文本框value的变化,但是当输入法变成中文后,input的keyup事件就不会被正常触发。这是最先前的写法。

<html>
<head>
<script type="text/javascript" src="http://www.zlovezl.cn/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事件检测文本框内容:

同步被修改

 

 

如你所见,这样的写法遇到了中文不能触发keyup事件的问题。于是寻求解决方法,想起来baidu的搜索栏提示似乎是没有这个问题的,于是开始看百度的js。百度的js比较难看...方法命名净是一个字母,最后发现大概是使用了timeout做一个定时器来定时监测input框的修改。不是很满意这样的方法。于是继续查找看有没有更好的解决办法,于是就找到了oninputonpropertychange两个事件。

oninput是firefox下面可用,而onpropertychange则是ie下可用。两个方法有着一些区别。

oninput只能检测到value这个属性的变化,而onpropertychange则可以检测到包含value的所有属性的变化。于是开始改成这个样子。

<html>
<head>
<script type="text/javascript" src="http://www.zlovezl.cn/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';
            }
            $('#inputorp_i').bind(bind_name, function(){
                $('#inputorp_s').text($(this).val());
            })
        </script>
    </p>
</body>
</html>

效果如下:

 

使用oninput以及onpropertychange事件检测文本框内容:

同步被修改

问题这么被解决了。

<
>
1# Chang.Jian   said this at 2010-07-24 14:22 : [Quote]
沙发
2# args   said this at 2010-07-24 14:40 : [Quote]
度娘的js估计是经过js压缩了的~~~
3# 老王python   said this at 2010-07-24 15:55 : [Quote]
文章写的不错,博主的js好强阿。又学习到了新知识!
4# Admin   said this at 2010-07-24 16:38 : [Quote]
Quoted 老王python:

文章写的不错,博主的js好强阿。又学习到了新知识!


三脚猫..三脚猫..
5# Admin   said this at 2010-07-24 16:38 : [Quote]
Quoted args:

度娘的js估计是经过js压缩了的~~~


方法名字啥的都是一个字母,真他nnd省流量啊。
6# hef   said this at 2010-07-24 22:45 : [Quote]
猪猪 表示 没有压力
7# apoclast   said this at 2010-07-30 18:37 : [Quote]
google也有这个问题哇哈哈
8# Admin   said this at 2010-07-31 00:23 : [Quote]
Quoted apoclast:

google也有这个问题哇哈哈


google.com果然如此。
= =
9# andrewzhou   said this at 2010-08-06 19:52 : [Quote]
感谢了 正遇到这个问题 查半天了!!!!!!!!!!!!!!!
10# Admin   said this at 2010-08-07 11:50 : [Quote]
Quoted andrewzhou:

感谢了 正遇到这个问题 查半天了!!!!!!!!!!!!!!!


呃,居然有人能通过搜索引擎搜到我的blog文章么。
太感动了。T T
11# hef   said this at 2010-08-07 13:55 : [Quote]
Quoted andrewzhou:

感谢了 正遇到这个问题 查半天了!!!!!!!!!!!!!!!

Quoted Admin:

呃,居然有人能通过搜索引擎搜到我的blog文章么。
太感动了。T T


ms zl好久没感动了
12# andrewzhou   said this at 2010-08-08 21:25 : [Quote]
呵呵
13# dongzz   said this at 2010-08-19 11:30 : [Quote]
成功发言
14# jasonycliu   said this at 2011-11-22 11:13 : [Quote]
不错的解决方案!
Name:  *   Remember me
E-mail:  *  Not public, supported by Gravator
Website:      Not required
Question:
9 - 8 = *
Content: