输入法下keypress、keyup失效的解决方案

在某些情况下,我们需要即时监听文本框的变化,但在输入法的情况下keypress、keyup事件会失效。有什么办法解决呢?

问题

在开启输入法的情况下,三个浏览器的具体问题如下:

  • IE:触发keydown和keyup, 不触发keypress. 能够获得输入值。
  • Firefox:触发keydown和keypress, 不触发keyup. 输入值未能获得。在回车后会触发keyup, 可获得输入值。
  • Opera:keydown, keypress和keyup都不触发,输入值也未能获。
  • Chrom:不会触发keypress事件

解决方案

  • 使用setInterval实现

  当输入框处于聚焦(focus)状态时,设置一个定时器,每 10 毫秒执行一次回调函数;在输入框失焦(blur)时,清除这个计时器。

  • onpropertychange +oninput 事件实现

  IE支持onpropertychange事件,firefox、chrome支持oninput事件。

  遗憾的是,在输入法开启的情况下,Opera对于 oninput 也没法随时监听(表现在:输入英文字母可以监听到,而中文则失效)。如果不考虑 Opera, IE使用 onpropertychange而 Firefox、Chrome 使用 oninput, 也可解决我们上述问题。

  另外需要注意的是, oninput 比较诡异,您可以<input oninput="jsFunc()" ... />来绑定,也可以用addEventListener来绑定,就是不能使用 DOM 0 的element.oninput = function(){} 的形式来绑定,否则不生效。

转载于:https://www.cnblogs.com/qhca/archive/2011/12/12/2284858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值