以下代码在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中开发瑞典应用程序时非常烦人!
谢谢!
编辑:
庄园在他的回答中说,可以使用输入事件.这是一个小提琴,演示了按键,输入和更改事件之间的区别:http://jsfiddle.net/Qxd76/(使用http://jsfiddle.net/Qxd76/show查看智能手机的结果).
解决方法
我只是花了大量的时间来解决这个问题.我发展到希伯来语,所有希伯来语宪章都不是为我发射的事件.
我找到解决方案,我会给它的简短解释
当使用所有关键事件时,浏览器搜索您要按的键.导致某些原因,在Android本机浏览器中,英文中的其他语言的所有章程都是未知的,这就是为什么在填写输入章程时不会发生任何事件.
解决方案是在输入中搜索事件,而不是在键上搜索事件.例如,如果我们在文本输入.change()方法将是伟大的我们.
我在addEventListener()方法中使用,并且像一个魅力一样工作.
这是代码
var exmpleInput = document.getElementById('input-id'); if(exmpleInput) { exmpleInput.addEventListener("input",function() { exampleFunction(this) },false); }