OnKeyPress,onKeyDown,onKeyUp事件在Android下键入字母时未在Firefox / Chrome中触发

时间:2014-01-27 17:53:30

标签: javascript android google-chrome firefox

我在Android下遇到了Firefox / Chrome的问题。

当我在输入框中键入文本时(请参阅下面的代码),键入字母时不会触发onkeypress,onkeyup和onkeydown事件,但是当键入“%”符号或按空格键时,它会触发。

在Android“预装”浏览器中,一切都很好。

另一个非常罕见的事情,如果我的光标不是最后一个字符,行为会有所不同......如果我的光标位于文本的中间,则在Firefox下,所有事件都会针对任何键触发。在Chrome中,事件onkeyup和onkeydown会因按下一个键而被触发两次,但onkeypress不会被触发。

我在不同的设备上测试了它,但问题类似。

我在互联网上找不到任何类似的问题。有人之前已经遇到过这个问题吗?你是怎么解决的?

像Amazon.com这样的网站可以自动完成,因此必须有一个解决方法......

请注意,最新版本的Firefox和Chrome

中的问题已消失

非常感谢您的帮助。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>onKeyXxx event test</h1>
<input type="text" onkeydown="alert('DOWN');" onkeypress="alert('Press');" onkeyup="alert('UP');">
<hr/>
</body>
</html>

2 个答案:

答案 0 :(得分:4)

setInterval成功了。

我不确定如何在Script.aculo.us(我用于自动选择下拉列表的库)中实现它,但我会找到一种方法。

以下是实现setTimer的解决方案示例:)

<!DOCTYPE html>
<html>
<head>
<script>
typedText="";
function checkTextChange(){
    if (document.getElementById("test").value != typedText){
        typedText=document.getElementById("test").value;
        document.getElementById("output").innerHTML=typedText;
        return true;
    } else {
        return false;
    }
}
if (navigator.appVersion.indexOf("Android")>-1 && (navigator.appVersion.indexOf("Safari")==-1 || navigator.appVersion.indexOf("Chrome")>-1)){
    alert("Using work around");
    var myVar = setInterval(function(){checkTextChange();},200);
}
 </script>
</head>
<body >
<h1>onKeyXxx event test</h1>
<form>
<input type="text" name="test" id="test"  onkeydown="checkTextChange();" onkeypress="checkTextChange();" onkeyup="checkTextChange();">
</form>
<div id="output"></div>
<hr>
</body>
</html>

答案 1 :(得分:3)

您不能直接发出警告请遵循以下任何方式

<input type="text" onkeydown="JavaScript:return alert('DOWN');">

OR

<input type="text" onkeydown="return myFun();">

您可以在文档中的任意位置和标记之间定义函数。