Android浏览器中的某些键没有按键事件

时间:2012-02-15 23:10:44

标签: javascript jquery android cordova

以下代码适用于Chrome,Firefox,iPhone,甚至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也不起作用。我错过了什么,或者这是一个错误?在PhoneGap中开发瑞典应用程序时,这非常烦人!

谢谢!


修改 正如庄园在他的回答中所说,可以使用input事件。这是一个小提琴,演示了keypressinputchange事件之间的差异:http://jsfiddle.net/Qxd76/(使用http://jsfiddle.net/Qxd76/show在智能手机上查看结果)。

1 个答案:

答案 0 :(得分:11)

我只是花了很多时间来解决这个问题。我发展为希伯来语,所有希伯来宪章都没有为我开火。

我找到了解决方案,我将在

之前简要解释

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

解决方案是在输入中搜索事件而不是在键上搜索事件。例如,如果我们在文本中输入.change()方法对我们来说将是很好的。

我正在使用addEventListener()方法,并且像魅力一样工作。

这是代码

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