看看这个非常简单的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**总是空的。
为什么不同浏览器之间的行为会有如此大的差异,我该如何解决我的问题?
1条答案
按热度按时间blmhpbnm1#
我最后得到了Glauber Borges对this thread和我的答案的混合。我不得不在他的keydown处理程序中使用
event.preventdefault()
,当它是特殊代码(箭头键,删除,退格键,返回)时,否则当插入符号不在末尾时,它会拧坏他的结果。这在Android Chrome上运行得很好,但Android Firefox现在得到了重复的文本。所以就像我之前做的那样,我也在
input
处理程序中添加了一个对.val('');
的调用来清除文本差异,现在它似乎在每个平台上都能工作。谷歌真的应该为文本输入事件创建一个更好的标准,浏览器(和229键码)之间缺乏共同行为是可怕的。