【问题标题】:jQuery Bind 'Change' to Range of Fields in Multiple GroupsjQuery 将“更改”绑定到多个组中的字段范围
【发布时间】:2017-05-29 07:37:35
【问题描述】:

我有 2 个标签。在每个选项卡中,都有一个包含多个字段部分的单独表单。字段是引导单选或复选框按钮组。

每个部分可以有任意数量的字段。

我想要完成的是使用jQuery绑定('change')到每个部分的最后几个字段,这样只有当该部分的最后几个字段完成时,才会显示下一个部分。

我目前绑定到每个部分中的所有字段,因此当用户更改当前部分中的第一个字段时,会显示下一部分。我想将其更改为仅在完成最后一个或倒数第二个字段时才显示下一部分。

通用代码结构示例:https://jsfiddle.net/uqvhw7sb/4/

基本示例:

<tab1>
<formA>
<groupA>
<input a[]>
<input a[]>
<input a[]>

<input b[]>
<input b[]>
<input b[]>

<input c[]>
<input c[]>
<input c[]>
</groupA>

<groupB>
<input d[]>
<input d[]>
<input d[]>

<input e[]>
<input e[]>
<input e[]>

<input f[]>
<input f[]>
<input f[]>
</groupB>
</formA>
</tab1>

<tab2>
Same kind of thing, possible same field names
</tab2>

【问题讨论】:

    标签: javascript jquery twitter-bootstrap


    【解决方案1】:

    您可以使用slice(-2) 过滤集合中的最后两个元素。因此,遍历所有组并在该组中查找输入集合并过滤该集合

    类似:

    $(".fgroups").each(function(){
        var $group = $(this);
        $group.find('input:checkbox').slice(-2).on("change", function() {
            $group.next().toggle(this.checked);
        });
    });
    

    【讨论】:

    • 谢谢。但是,这仅在最后一个复选框组的最后两个输入之一发生更改时触发。因此,如果我使用上面的示例单击 c[0],则不会发生任何事情。单击 c[1] 或 c[2] 有效。另外,你能解释一下切换(this.checked)吗?不知道为什么会在那里。我在测试中替换为 removeClass()。
    • 我按照你所说的......每个部分的最后两个......你没有具体说明什么构成了一个部分。如果您希望每个按钮组中的最后 2 个更改第一个选择器以匹配那些
    • 我承认的措辞有点令人困惑......因为有字段组(部分)和字段组(复选框值)。您的示例干净且接近,但对于该问题并不完全准确。然而,它确实让我找到了一个运行良好的解决方案。不知道在这里做什么......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多