jquery .next('input')。focus()

时间:2013-06-28 09:08:53

标签: javascript jquery focus

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;
    }
});

5 个答案:

答案 0 :(得分:4)

您可以使用prevAllnextAll与选择器: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;
    }
});

您可以在http://jsfiddle.net/V7SHp/

看到这种情况

答案 1 :(得分:0)

我认为您的问题是使用数字键盘。尝试使用普通数字,或向else if阻止(e.which > 47 && e.which < 58) || (e.which > 96 && e.which < 106)

添加键代码97到105
$('.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>inputnext方法不会返回输入。

答案 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();
}