2012-02-15 37 views
10

下面的代码适用于Chrome,Firefox,iPhone,甚至是Android上的第三方浏览器。但是,在本机浏览器键盘事件中运行特殊字符(如瑞典键盘上的Å,Ä和Ö)时,不会触发。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也不起作用。我错过了什么,或者这是一个错误?在PhoneGap中开发瑞典语应用程序时非常烦人!

谢谢!


编辑: 作为庄园在他回答说,可以使用input事件。以下是演示keypress,inputchange事件之间差异的小提琴:http://jsfiddle.net/Qxd76/(使用http://jsfiddle.net/Qxd76/show查看智能手机上的结果)。

+0

林遇到了同样的事情,这可能是android系统中的错误吗? – rapadura 2012-07-03 14:47:58

+0

我很确定这是一个android原生浏览器中的错误,这是webviews正在使用的。我还没有确认,但我怀疑它应该在版本4之后解决,因为他们之后将浏览器更改为Chrome浏览器? – Zut 2012-07-19 18:08:04

+0

@rapadura @Zut''input''事件不会返回''keyCode''或''which''或''charCode'' .. – Kosmetika 2014-07-14 14:06:23

回答

9

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

我找到了解决办法,我就给它短前

时使用的所有重要事件的浏览器搜索的关键,你迫切要求解释。导致某些原因在Android本地浏览器中的所有其他语言的英语宪章是未知的,这就是为什么填写输入章程时不会触发任何事件。

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

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

这是代码

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

输入事件完美地工作!虽然变化事件只会在输入失去焦点时才会触发,并且不能像问题中所述那样使用。 – Zut 2013-02-20 21:56:59

+0

保存我的一天! – Lentyai 2017-05-08 10:08:17