2014-03-19 97 views
6

这是我第一次在mobile Apps上工作。 keyUp事件不发射如果我按backspace按钮。backSpace在Android手机中没有触发按键事件

我作了jsFiddle作为参考。

最初用户输入23,然后用户使用退格按钮删除3。虽然输入23事件触发但删除时间事件没有触发。我正在使用device : motorola motog,Android Version:4.4.2

我该如何解决这个问题,任何人都可以用示例代码来帮助我。

回答

17

问题是Chrome自从Android 4.4以来停止触发“退格键”的按键事件。这在许多基于webview的应用程序中遇到问题以捕捉所需的事件。通过使用input事件可以解决这个问题,只要用户键入内容,粘贴某些内容或点击键盘上的“.com”按钮,就会触发此事件。

最好是依靠input事件,如果您只是为了捕捉对输入的更改。如果您想要防止默认操作,那么这并不有用。

对于你的情况,我认为它应该适合。但要小心,早于Android 4版本对此事件的支持。

更新小提琴 - http://jsfiddle.net/aravindbaskaran/33Snz/24/

+0

这有助于解决您的问题吗? – aravind

+0

对不起,我没有看到你的消息,当我发布一个问题时,我发现了解决方案的一天。我忘了发布答案。无论如何,你说的是对的。我也在使用'输入'事件。这是工作的魅力。 – user3279058

+1

请记住,空输入将导致输入事件不能触发! http://stackoverflow.com/questions/10004581/jquery-input-event-does-not-fire-if-input-is-empty –

2

至于解决方案,你可以尽量避免使用 '输入' 事件,如提及@aravind。 问题是“输入”事件不适用于< = ie9和一些移动操作设备。当然,您可以使用浏览器支持检测,例如modernizr或简单snippet,并使用支持keyUp/input事件。

另一方面,您可以一起使用所有事件,浏览器将自行决定使用哪一个事件。问题是 - 在这种情况下,回调函数将在支持这两个事件的现代浏览器中调用两次。

解决方法是使用去抖功能来防止双重调用。

$('.parent').on('change keydown input', _.debounce(function() { 
    // whatever 
}, 0)); 

请注意,我使用keydown事件,而不是KEYUP因为我设置延时只有0毫秒,因此KEYUP将在更晚打电话_.debounce并不能帮上忙。