页面上的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();
}
});
如何设置最后一个输入字段以重新获得焦点?
答案 0 :(得分:42)
尝试更换:
$("#"+id).select();
使用:
$(this).focus();
在这种情况下,$("#"+id)
和$(this)
是相同的元素,我假设您在发生错误时想要focus
元素。
除此之外:我不认为id
或name
值可以合法地以数字开头,您可能希望在其前面添加option1
,option2
之类的内容它可能会起作用,但它也可能导致以后难以调试的问题。最好在谨慎和最佳实践方面犯错误。
What are valid values for the id attribute in HTML?
修改:未能让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);
}
});
我很想知道是否有更好的方法来做这个或解释。我怀疑模糊和焦点事件是不是按照使前一种方法成为可能的顺序触发的?
演示:http://jsfiddle.net/zRWV4/1/
如评论中所述,您最终应确保该值为parseInt
或类似的整数(您似乎已经意识到这一点)。
答案 1 :(得分:2)
替换
$("#"+id).select();
通过
$("#"+id).focus();
甚至
$(this).focus();
答案 2 :(得分:0)
(尝试使用.blur()
代替.focusout()
。但这可能无济于事)
尝试删除alert()
一段时间 - 它有时会导致焦点问题......
答案 3 :(得分:0)
您应该解析输入中的文本以将其与数字进行比较。 var input = parseInt($(this).val());
“
$(":input").blur(function(){
var input = parseInt($(this).val());
var id = $(this).attr('id');
if(input > 10){
alert('You must enter a number between 0 and 10 '+id);
$("#"+id).select();
}
});
答案 4 :(得分:0)
<强> jsFiddle Example 强>
这是我的代码,我会解释我改变的内容:
$('input[id^="input"]').focusout(function(){
var selected = parseInt($(this).val(), 10);
if (selected <= 10) {
$("#input-"+selected).focus();
}
else {
alert('Invalid Argument! 1-10 only!');
$(this).focus();
}
});
focus()
代替select()
,但这不起作用。id
与select
混淆,导致您始终尝试选择$("#input-IDOFSELECTIONINPUT")
而不是$("#input-IDOFWANTEDINPUT")
$("#"+id).select();
)置于不受欢迎的状态(input > 10
),这实际上从未给它机会。