Passcoder是我制作的jquery库,将会发布。它将输入字段拆分为单字符输入框(如iPhone密码)。其中一个功能是按下一个按钮来聚焦下一个输入。
问题似乎是.next('.passcoder')
没有达到预期效果。在第一行输入(employee_name输入)上,它将按预期运行,但是当它应该聚焦第一个密码输入(从第四个员工名称到密码)时,.next('.passcoder')
不会返回任何内容
标记:
<form action="" method="post"
<h4>Employee Number</h4>
<input type="text" class="single-character-name passcoder" name="employee_number-0">
<input type="text" class="single-character-name passcoder" name="employee_number-1">
<input type="text" class="single-character-name passcoder" name="employee_number-2">
<input type="text" class="single-character-name passcoder" name="employee_number-3">
<br>
<h4>Employee Passcode</h4>
<input type="password" class="single-character-password passcoder" name="employee_passcode-0">
<input type="password" class="single-character-password passcoder" name="employee_passcode-1">
<input type="password" class="single-character-password passcoder" name="employee_passcode-2">
<input type="password" class="single-character-password passcoder" name="employee_passcode-3">
<br />
<br />
<input class="btn btn-success" type="submit">
<a class="btn">Cancel</a>
</form>
javascript(jQuery):
$('.passcoder').keyup(function(e){
if (e.which == 8){
//backspace
$(this).prev('input').focus();
}
else if(e.which > 47 && e.which < 58){
$(this).next('.passcoder').focus();
}
else{
$(this).val('');
return false;
}
});
答案 0 :(得分:4)
您可以使用prevAll
和nextAll
与选择器:first
来查找下一个和上一个元素:
$('.passcoder').keyup(function(e){
if (e.which == 8){
//backspace
$(this).prevAll('input:first').focus();
}
else if(e.which > 47 && e.which < 58){
$(this).nextAll('.passcoder:first').focus();
}
else{
$(this).val('');
return false;
}
});
看到这种情况
答案 1 :(得分:0)
我认为您的问题是使用数字键盘。尝试使用普通数字,或向else if
阻止(e.which > 47 && e.which < 58) || (e.which > 96 && e.which < 106)
$('.passcoder').keyup(function (e) {
if (e.which == 8) {
//backspace
$(this).prev('input').focus();
} else if ((e.which > 47 && e.which < 58) || (e.which > 96 && e.which < 106)) {
$(this).next('.passcoder').focus();
} else {
$(this).value('');
return false;
}
});
答案 2 :(得分:0)
试试这个
$(this).nextAll(".passcoder").eq(0).focus();
答案 3 :(得分:0)
根据jQuery.next
documentation:
获取该组中每个元素的紧随其后的兄弟 匹配的元素。如果提供了选择器,它将检索下一个选择器 兄弟姐妹只有匹配那个选择器。
由于<br>
之间有<h4>
和input
,next
方法不会返回输入。
答案 4 :(得分:0)
试试这个
http://jsfiddle.net/mattydsw/DDNbQ/
var next = $(this).next('.passcoder');
if (next.length>0) {
next.focus();
} else {
$(this).nextUntil('.passcoder').next('.passcoder').focus();
}