Javascript 仅限Android Chrome:在键控期间更改输入值不会';不适用
看看这个非常简单的JSFIDLE: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
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());
}
});