取消选中id相似但名称不同的脚本生成复选框


Uncheck script generated checkboxes with similar ids but different names

下面是示例代码:

<form method="post" action="actions.php">
<div id="container">
<input type="checkbox" name="action1" id="a1-100" value="100"> Action 1 on 100
<input type="checkbox" name="action2" id="a2-100" value="100"> Action 2 on 100
<br><br><br><br>
<input type="checkbox" name="action1" id="a1-200" value="200"> Action 1 on 200
<input type="checkbox" name="action2" id="a2-200" value="200"> Action 2 on 200
</div>
<input type="submit" name="submit" value="Perform Actions">

考虑这个例子,将PHP生成的复选框列表作为表单元素,其中PHP只生成了2个100复选框和2个200复选框。

对于每个唯一值,我只需要Action 1或Action 2。因此,如果对于值100,Action 1被选中,我希望对于值100的Action 2被取消选中,而不影响其他值中的任何内容。

我怎样才能做到这一点?

最好的方法是使用单选按钮:

<form method="post" action="actions.php">
<div id="container">
<input type="radio" name="action-for-100" id="a1-100" value="100"> Action 1 on 100
<input type="radio" name="action-for-100" id="a2-100" value="100"> Action 2 on 100
<br><br><br><br>
<input type="radio" name="action-for-200" id="a1-200" value="200"> Action 1 on 200
<input type="radio" name="action-for-200" id="a2-200" value="200"> Action 2 on 200
</div>
<input type="submit" name="submit" value="Perform Actions">

请注意,我已经更改了name属性,因此它将应该互斥的单选按钮分组在一起(例如,action-for-100而不是action1action2)。

如果您除了使用现有HTML之外别无选择,那么您可以使用属性选择器:

$("#container input[type=checkbox]").click(function() {
    if (this.checked) {
        $("#container input[type=checkbox][value=" + this.value + "]")
            .not(this)
            .prop("checked", false);
    }
});

这将确保在选中"this"复选框时,容器中具有相同value的所有其他复选框都未选中。如果你取消选中一个,它不会起任何作用。