仅限Android Chrome浏览器:键控期间更改输入瓦尔不适用

yv5phkfx  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(89)

看看这个非常简单的jsfiddle:https://jsfiddle.net/gq9jga4q/33/

<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());
      }
  });

我的目标是能够为input元素中键入的每个键调用一个函数。
我订阅了keyup事件,对于其中的每一个字母,我都将它们附加到文档中,然后清除文本输入,以便下次重新启动。

#resultdiv是要发送到外部库的输出。
#result2用于说明当你快速输入时,在一个keyup事件中会注册多个字母(没关系)。
#result3用于显示清除输入后,它确实被很好地清除。

这在桌面(IE/Chrome/Firefox)、iPhone(Safari/Chrome)和Android(Firefox)上都能完美运行。但Android上的Chrome给予了不同的行为。
每次keyup事件被触发时,$('#kbdhook').val()的结果都是$('#kbdhook').val('');“清除”没有发生时的值,但是它发生了,因为**#result3**总是空的。
为什么不同浏览器之间的行为会有如此大的差异,我该如何解决我的问题?

blmhpbnm

blmhpbnm1#

我最后得到了Glauber Borges对this thread和我的答案的混合。我不得不在他的keydown处理程序中使用event.preventdefault(),当它是特殊代码(箭头键,删除,退格键,返回)时,否则当插入符号不在末尾时,它会拧坏他的结果。
这在Android Chrome上运行得很好,但Android Firefox现在得到了重复的文本。所以就像我之前做的那样,我也在input处理程序中添加了一个对.val('');的调用来清除文本差异,现在它似乎在每个平台上都能工作。
谷歌真的应该为文本输入事件创建一个更好的标准,浏览器(和229键码)之间缺乏共同行为是可怕的。

相关问题