Javascript 仅限Android Chrome:在键控期间更改输入值不会';不适用

Javascript 仅限Android Chrome:在键控期间更改输入值不会';不适用,javascript,android,jquery,html,google-chrome,Javascript,Android,Jquery,Html,Google Chrome,看看这个非常简单的JSFIDLE: 1: 2: 三: $('#kbdhook').keyup(函数(事件){ var current=$('#kbdhook').val(); 如果(当前!=''&¤t!='\n'){ 变量c,l; 对于(l=0;l

看看这个非常简单的JSFIDLE:


1: 
2: 
三:
$('#kbdhook').keyup(函数(事件){
var current=$('#kbdhook').val();
如果(当前!=''&¤t!='\n'){
变量c,l;
对于(l=0;l
我的目标是能够为输入元素中键入的每个键调用函数

我订阅keyup事件,对于其中的每个字母,我都将它们附加到文档中,然后清除文本输入,以便下次重新启动

#resultdiv是要发送到外部库的所需输出

#result2用于显示有时当您快速键入时,在一个keyup事件中会注册多个字母(这没关系)

#result3用于显示在清除输入后,它确实被很好地清除

这在桌面(IE/Chrome/Firefox)、iPhone(Safari/Chrome)和Android(Firefox)上都能完美运行。但是Android上的Chrome给出了不同的行为

每次触发keyup事件时,
$('#kbdhook').val()
的结果都是“清除”
$('#kbdhook').val('')的值不会发生。但确实如此,因为result3总是空的


为什么不同浏览器之间的行为会有如此大的差异,我该如何解决我的问题呢?

我最终得到了Glauber Borges和我的答案的混合。当使用特殊代码(箭头键、delete、backspace、return)时,我必须在他的keydown处理程序中使用
event.preventdefault()
,否则当插入符号不在末尾时,它会扭曲他的结果

这在Android Chrome上运行得很好,但是Android Firefox现在得到的是重复文本。所以就像我之前做的一样,我还添加了对
.val(“”)的调用
输入
处理程序中添加文本差异后进行清除,现在似乎在每个平台上都可以使用


谷歌真的应该为文本输入事件创建一个更好的标准,浏览器之间缺乏共同行为(以及229键码)真是糟糕透了。

谢谢你的回复,但我不明白。“if(onclick)”(总是返回false)的目标是什么?您是在尝试查看是否定义了onclick事件,还是引用了某个变量?此外,touchend事件只有在我写完文本后重新点击文本输入时才会触发,而不是在每个字母输入后才触发。很抱歉,
typeof onclick
似乎在所有浏览器的手机和桌面上都有定义,您可能与上面评论中的情况相反。最重要的是,
touchend
似乎不是解决此问题的合适替代品,因为它不会在按下每个字母时触发。对于错误信息,我深表歉意。如果(onmousemove){/*假设可以使用常规事件*/},我将使用
,否则{/*假设您需要touch events*/}
。然而,这看起来不像你的问题。如果你在
$(''kbdhook').val(''''')之前做
$(''kbdhook').val()
$(''kbdhook').html()+'+$('kbdhook').val()
将是
'3:'
。对谷歌的批评被投了赞成票;我已经厌倦了摇摇欲坠的手机输入模式
<input type="text" id="kbdhook" />

<div id="result" >1: </div>

<div id="result2" >2: </div>

<div id="result3" >3: </div>

$('#kbdhook').keyup(function(event) {
      var current = $('#kbdhook').val();
      if (current !== '' && current !== '\n') {
        var c, l;
        for (l = 0; l < current.length; l++) {
          c = current[l];
          $("#result").html($("#result").html() + c);
        }

        $("#result2").html($("#result2").html() + " " + $('#kbdhook').val());
        $('#kbdhook').val('');
        $("#result3").html($("#result3").html() + " " + $('#kbdhook').val());
      }
  });