安卓浏览器中某些按键没有按键事件

10

以下代码在Chrome、Firefox、iPhone上甚至在Android的第三方浏览器中都能正常工作。但是,在我的瑞典键盘的本地浏览器中运行时,像Å、Ä和Ö这样的特殊字符的关键事件根本不会被触发。

该示例只允许用户一次输入一个字符。除非我在Android上按下像Å、Ä或Ö这样的键,否则它就可以完美地工作,此时我可以输入任意数量的字符。

这里有一个jsFiddle供任何希望尝试的人使用:http://jsfiddle.net/x7H6f/。如果您的键盘上没有像我这样的瑞典特殊键,那么像é(按住E键)这样的字符应该可以“骗过去”。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Key Event test</title>
    </head>
    <body>
        <input type="text" id="a" name="test" />
        <script>
            document.getElementById("a").onkeypress = function(e) {
                e = e || window.event;
                var k = e.keyCode || e.which;
                this.value = String.fromCharCode(k);
                return false;
        }
        </script>
    </body>
</html>

不,keydown和keyup也不起作用。我有漏掉了什么吗,还是这是一个bug?在使用PhoneGap开发瑞典应用时非常恼人!

谢谢!


编辑: 如Manor在他的答案中所说,可以使用事件。这里有一个演示keypressinputchange事件之间差异的fiddle:http://jsfiddle.net/Qxd76/(使用http://jsfiddle.net/Qxd76/show在智能手机上查看结果)。


我也遇到了同样的问题,这可能是 Android 中的一个 bug 吗? - rapadura
我相当确定这是Android本地浏览器中的一个错误,这也是WebViews所使用的。我还没有确认过,但我怀疑它应该在4版本之后得到解决,因为他们在那之后将浏览器更改为Chrome? - Zut
@rapadura @Zut,“input”事件不返回“keyCode”、“which”或“charCode”。 - Kosmetika
1个回答

11

我刚刚花了很多时间研究这个问题。我正在开发希伯来语,并且所有希伯来字符对我来说都无法触发事件。

我找到了解决方法,在此之前我将简要介绍一下。

当使用所有按键事件时,浏览器会搜索您按下的按键。因为某些原因,在Android原生浏览器中,所有非英语语言中的字符都是未知的,这就是为什么在您填写输入字符时不会触发任何事件的原因。

解决方案是在输入框中搜索事件,而不是按键。例如,如果我们在文本输入中使用.change()方法,这将非常好。

我正在使用addEventListener()方法,并且它像魅力一样运行。

这是代码:

var exmpleInput = document.getElementById('input-id');
if(exmpleInput) {
    exmpleInput.addEventListener("input", function() {
        exampleFunction(this)
    }, false);
}

输入事件完美工作!尽管更改事件仅在输入失去焦点时触发,并且不能像问题描述的那样使用。 - Zut

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