jQuery焦点无法在Chrome中运行

ryb*_*111 31 html javascript jquery google-chrome

请看这个小提琴:http://jsfiddle.net/yg49k/

以下代码在FireFox中正常工作,但在最新版本的Chrome中无效.

HTML:

<input type="text" id="one" placeholder="Type two chars" />
<input type="text" id="two" placeholder="It should focus here" />
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$("#one").on("input", function() {
    if($("#one").val().length == 2) { $("#two").focus(); }
});
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎么能解决这个问题?

cla*_*fob 71

好像是Chrome中的一个错误.有时候执行事件太快了;)

找到了解决方法http://jsfiddle.net/Rd2rZ/

$("#one").on("input", function() {
    if($("#one").val().length == 2) { 
        setTimeout(function(){
            $("#two").focus();
        }, 1);
    }
});
Run Code Online (Sandbox Code Playgroud)

使用setTimeout时间最短.它会降低Chrome的速度并使其正常运行.

  • 呀,它很简单,甚至不需要为超时设置任何延迟 (2认同)
  • @roasted实际上设置0或1没有区别,因为不同的浏览器不能注册超过一些ms的超时.在移动浏览器上,此值可能从4到20毫秒不等.http://stackoverflow.com/questions/8341803/difference-between-settimeoutfn-0-and-settimeoutfn-1 (2认同)