【问题标题】:JQuery hidden element input issue traversingjQuery隐藏元素输入问题遍历
【发布时间】:2016-10-13 08:19:49
【问题描述】:

我有一个我无法解决的问题。我有一组 DIV,默认为 display: none;

<div id="pivot">
    <div id="leftcol">Pivot</div>
    <div id="rightcol">
        <input class="small" value="030-" disabled />
        <input class="input" id="pi" maxlength="6" />
        <span id="pit"></span>
    </div>
</div>
<div id="pos1">
    <div id="leftcol">Position 1</div>
    <div id="rightcol">
        <input class="small" value="031-" disabled />
        <input class="input" id="p1" maxlength="6" />
        <span id="p1t"></span>
    </div>
</div>
<div id="pos2">
    <div id="leftcol">Position 2</div>
    <div id="rightcol">
        <input class="small" value="031-" disabled />
        <input class="input" id="p2" maxlength="6" />
        <span id="p2t"></span>
    </div>
</div>
<div id="pos3">
    <div id="leftcol">Position 3</div>
    <div id="rightcol">
        <input class="small" value="031-" disabled />
        <input class="input" id="p3" maxlength="6" />
        <span id="p3t"></span>
    </div>
</div>
<div id="pos4">
    <div id="leftcol">Position 4</div>
    <div id="rightcol">
        <input class="small" value="031-" disabled />
        <input class="input" id="p4" maxlength="6" />
        <span id="p4t"></span>
    </div>
</div>
<div id="pos5">
    <div id="leftcol">Position 5</div>
    <div id="rightcol">
        <input class="small" value="031-" disabled />
        <input class="input" id="p5" maxlength="6" />
        <span id="p5t"></span>
    </div>
</div>
<div id="pos6">
    <div id="leftcol">Position 6</div>
    <div id="rightcol">
        <input class="small" value="031-" disabled />
        <input class="input" id="p6" maxlength="6" />
        <span id="p6t"></span>
    </div>
</div>

然后这段代码取消隐藏相关部分:

$.ajax({        
    url: "getSerial.asp",
    data: { term: term },
    dataType: "json",
    success: function(data) {
        $('option:selected').append('-' + data[0].sn)
        $('#prefix').attr('disabled', true)
        var code = data[0].partno.substring(6, 12);
        len = code.length;
        $('#pivot').show(0);
        for (var i = 0; i < len; i++) {
            if (code.substr(i, 1) != "-") {
                $('#pos' + code.substr(i, 1)).show(0);
            }                   
        }
        $('div').find('input:enabled').first().focus();
    }       
}); 

所以效果很好。然后我要做的是当您输入 6 个字符时,它会自动跳到下一个可见输入(class="input")。我的代码非常乏味,只能与下一个逻辑 div(pos1、pos2 等)一起使用。组合可能是 pos1,pos3,pos3 所以错过了数字 2(因为它仍然是隐藏的)。

$(this).parent('div').parent('div').next('div').find('.input:visible').focus()

这不适用于上述组合。如何仅成功遍历到下一个可见的 .input 类?

【问题讨论】:

  • 我建议使用 Stack Snippets(&lt;&gt; 工具栏按钮)创建一个 minimal reproducible example 以使其可运行,删除不相关的内容(例如 ajax),替换它们如有必要,使用虚拟值/调用。

标签: javascript jquery html tree-traversal


【解决方案1】:

在选择器中使用:has() 来匹配包含可见输入的DIV。

$(this).parent('div').parent('div').nextAll('div:has(.input:visible)').first().find('.input:visible').focus();

【讨论】:

  • 感谢@barmar 辛苦了!不确定两个父 DIV 是否可以接受。
  • 我更喜欢给祖父母上课,用.closest('.classname')
  • 我已经按照建议进行了更改,并且工作正常,并且使代码更简单,再次感谢!
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多