2014-03-19 34 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並不能幫上忙。