中文输入法不触发onkeyup事件的解决办法


Posted in Javascript onJuly 09, 2014

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

具体表现是这样的:

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

<html>
<head>
<script type="text/javascript" src="https://3water.com/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="https://3water.com/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>

问题这么被解决了。

Javascript 相关文章推荐
js 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
Javascript下判断是否为闰年的Datetime包
Oct 26 Javascript
JQuery中$.ajax()方法参数详解及应用
Dec 12 Javascript
jQuery对象与DOM对象之间的相互转换
Mar 03 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
浅谈JavaScript find 方法不支持IE的问题
Sep 28 Javascript
Vue中使用vee-validate表单验证的方法
May 09 Javascript
微信小程序实现留言功能
Oct 31 Javascript
node版本管理工具n包使用教程详解
Nov 09 Javascript
js canvas实现橡皮擦效果
Dec 20 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
Aug 20 Javascript
JavaScript实现筛选数组
Mar 02 Javascript
js中将String转换为number以便比较
Jul 08 #Javascript
JS循环遍历JSON数据的方法
Jul 08 #Javascript
jquery获取选中的文本和值的方法
Jul 08 #Javascript
jQuery设置和获取HTML、文本和值示例
Jul 08 #Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 #Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 #Javascript
Javascript遍历table中的元素示例代码
Jul 08 #Javascript
You might like
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
C++是不是类型安全的
2014/02/18 面试题
工程造价专业大学生自荐信
2013/10/01 职场文书
人事部岗位职责范本
2014/03/05 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
Django实现翻页的示例代码
2021/05/24 Python
react中的DOM操作实现
2021/06/30 Javascript
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android