Jquery专注于输入字段

Som*_*omk 36 javascript jquery

页面上的HTML有20个<input>字段,每个字段都以1到20的递增顺序命名和给出ID.

如果变量id设置为下一个顺序id(id+ 1),则此函数将使焦点应用于该字段.但是,当在当前输入字段外部单击时,如果输入的数字大于10,则最后一个输入字段将不会重新获得焦点,但会显示警报.

$(":input").focusout(function(){
    var input = $(this).val();
    var id    = $(this).attr('id');
    if(input > 10){ 
        alert('You must enter a number between 0 and 10 '+id);
        $("#"+id).select();
    }
});
Run Code Online (Sandbox Code Playgroud)

如何设置最后一个输入字段以重新获得焦点?

Wes*_*rch 42

尝试更换:

$("#"+id).select();
Run Code Online (Sandbox Code Playgroud)

附:

$(this).focus();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,$("#"+id)并且$(this)是相同的元素,并且我假设您focus在出现错误时想要元素.

旁白:我不相信idname值可以与一些法律开始,你可能需要的东西前缀他们喜欢option1,option2等它可能会奏效,但它也可能会造成难以调试的问题后.最好在谨慎和最佳实践方面犯错误.

HTML中id属性的有效值是什么?

编辑:在没有开始focus()工作之后,我尝试了setTimeout并且能够实现它.我不确定为什么,或者这是否真的有必要,但似乎有效.

$(":input").focusout(function(){
    var $this = $(this),
        input = $this.val();

    if (input > 10){
        alert('You must enter a number between 0 and 10');
        setTimeout(function(){
        $this.focus();
        }, 1); 
    }
}); 
Run Code Online (Sandbox Code Playgroud)

我很想知道是否有更好的方法来做这个或解释.我怀疑模糊和焦点事件不会按照使前一个方法成为可能的顺序触发?

演示:http://jsfiddle.net/zRWV4/1/

正如评论中所提到的,你应该最终确保该值是一个整数parseInt或类似的(你似乎已经意识到这一点).