keyup 无法在 Android 上的 Chrome 上运行

Posted

技术标签:

【中文标题】keyup 无法在 Android 上的 Chrome 上运行【英文标题】:keyup not working on Chrome on Android 【发布时间】:2013-08-01 04:38:35 【问题描述】:

我正在使用 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

谢谢

--贾斯汀·威利

【问题讨论】:

【参考方案1】:

我今天早些时候遇到了同样的问题。 android 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】:

抱歉,keyup/keydown 事件不适用于 android 中的 chrome 浏览器。 还有其他人在过去 1 年报告了这个问题(Here 和 Here),但尚未修复。所以开发者最好在修复之前避免使用这些事件。

【讨论】:

奇怪的是,我发现如果你输入一个空格(键码 32),然后输入一个退格键(键码 8),就会触发退格键。但只有前面的空格! 这里有一个解释为什么在android chrome中很难获取关键事件code.google.com/p/chromium/issues/detail?id=132015 我在 118639 上阅读了一些 cmets。不过我已经禁用了自动完成功能,所以我不明白为什么它不能。无论如何都足够公平 - 我可以看到一般的问题。但是——一个人能做什么?我是否必须编写一个 setInterval 函数并监视文本更改?顺便说一句 - 它似乎适用于任何非字母数字字符,后跟一个退格 - 而不仅仅是一个空格。

以上是关于keyup 无法在 Android 上的 Chrome 上运行的主要内容,如果未能解决你的问题,请参考以下文章

移动网络应用程序上的 keyup 似乎仍然没有覆盖内容块

Javascript autotab keyup/keydown 在 Cordova Android 浏览器中不起作用

输入事件不会使用角度触发Android设备上的功能

jquery mobile - 移动设备上的keyup keydown

自动填充侦听器和 keyup 触发器上的 JQuery 语法错误,同时循环并查找顺序命名的输入

执行一次 keyup