Chrome浏览器在安卓系统上keyup事件不起作用

6

我正在使用Bootstrap的typeahead功能。

它依赖于以下jQuery代码才能正常工作:

el.on('keyup', doSomething() )

在Windows上使用Chrome浏览器可以正常工作,但在Android上使用Chrome却不行。keyup事件从未触发。绑定了该事件的元素肯定具有焦点。这似乎是最近出现的问题。
Chrome 28.0.1500.64 Android 4.1.2 SGP321 Build/10.1.1.A.1.307
谢谢。 --Justin Wyllie
2个回答

3

我今天早些时候也遇到了同样的问题。安卓版的Chrome怎么可能不支持这些关键事件呢!我猜你现在已经找到了解决方法,但是这里是我暂时想出来的一种解决方案。

function newKeyUpDown(originalFunction, eventType) {
    return function() {
        if ("ontouchstart" in document.documentElement) { // if it's a touch device, or test here specifically for android chrome
            var $element = $(this), $input = null;
            if (/input/i.test($element.prop('tagName')))
                $input = $element;
            else if ($('input', $element).size() > 0)
                $input = $($('input', $element).get(0));

            if ($input) {
                var currentVal = $input.val(), checkInterval = null;
                $input.focus(function(e) {
                    clearInterval(checkInterval);
                    checkInterval = setInterval(function() {
                        if ($input.val() != currentVal) {
                            var event = jQuery.Event(eventType);
                            currentVal = $input.val();
                            event.which = event.keyCode = (currentVal && currentVal.length > 0) ? currentVal.charCodeAt(currentVal.length - 1) : '';
                            $input.trigger(event);
                        }
                    }, 30);
                });
                $input.blur(function() {
                    clearInterval(checkInterval);
                });
            }
        }
        return originalFunction.apply(this, arguments);
    }
}
$.fn.keyup = newKeyUpDown($.fn.keyup, 'keyup');
$.fn.keydown = newKeyUpDown($.fn.keydown, 'keydown');

2
抱歉说这句话,但是在安卓的chrome浏览器中,keyup/keydown事件无法使用。已经有其他人报告了这个问题(这里这里),并且这个问题已经持续了1年之久,但是还没有被修复。因此,在它被修复之前,开发者最好避免使用这些事件。

非常奇怪的是,我发现如果您输入一个空格(键码32),然后再输入一个退格键(键码8),它会触发退格键的键弹起事件。但这仅适用于前面有空格的情况! - user911625
这里有一个解释,为什么在Android Chrome中获取关键事件很困难:https://code.google.com/p/chromium/issues/detail?id=132015 - Milind Anantwar
我读了118639上的一些评论。虽然我已经禁用了自动完成,但我不明白为什么它不能工作。无论如何,可以理解存在一般性问题。但是,我们能做什么呢?我必须编写一个setInterval函数并监视文本更改吗?顺便说一下,似乎任何非字母数字字符后跟一个退格键都可以工作,而不仅仅是空格。 - user911625

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