在安卓手机上,按回退键不会触发 keyup 事件。

8
这是我第一次开发移动应用程序。如果我按下退格键,keyUp事件不会触发。我为参考制作了一个jsFiddle
最初用户输入了23,然后使用退格键删除了3。在输入23时,事件被触发,但在删除时事件未被触发。
我正在使用设备:摩托罗拉Motog,Android版本:4.4.2。
如何修复这个问题?有人能给我一个示例代码吗?
2个回答

19

问题出在Chrome在Android 4.4后停止触发"backspace"按键的keypress事件。这在很多基于webview的应用程序中是有问题的,因为这些应用无法捕捉到所需的事件。使用input事件可以在一定程度上缓解这个问题,该事件会在用户输入、粘贴或者点击键盘上的“.com”按钮等操作时触发。

如果你只需要捕捉输入内容的变化,最好依赖于input事件。但是如果你想要阻止默认行为,则该事件并不实用。

对于你的情况,我认为这个事件可以满足要求。但是请注意,在Android 4之前的版本可能不支持这个事件。

更新后的代码片段 - http://jsfiddle.net/aravindbaskaran/33Snz/24/


抱歉,我没有看到你的消息。当我发布问题时,我当天就找到了解决方案。我忘记发布答案了。不管怎样,你说的是对的。我也在使用“input”事件。它运行得很好。 - user3279058
1
请注意,空输入将导致输入事件不触发!https://dev59.com/H2LVa4cB1Zd3GeqPvE4f - Ryo C.

2
作为解决方案,您可以避免使用“input”事件,正如@aravind所提到的那样。 问题在于,“input”事件不适用于<=ie9和一些移动Opera设备。当然,您可以使用浏览器支持检测,例如通过modernizr或简单的snippet并使用支持的keyUp/input事件。
另一方面,您可以同时使用所有事件,浏览器将自行决定使用哪个事件。问题是-在这种情况下,回调函数将在支持两个事件的现代浏览器中调用两次。
解决方法是使用防抖函数来防止双重调用。
$('.parent').on('change keydown input', _.debounce(function() {
    // whatever
}, 0));

请注意,我使用的是keydown事件而不是keyup事件,因为我将延迟设置为0毫秒,所以keyup事件会晚很多,并且_.debounce无法帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接