【发布时间】:2019-08-31 16:17:06
【问题描述】:
我有一个带有复选框的表单,以及表单内的隐藏全选按钮。我使用 jQuery 来侦听表单外的按钮单击,然后“单击”隐藏的按钮元素以全选。有时页面会加载,我点击按钮,它工作得很好。您可以多次单击它,它们都会按预期选中和取消选中。表单提交完美。
但是,其他时候,页面会加载并且我单击按钮但没有任何反应。无论我点击多少次,他们都不会检查。我发现如果页面停留超过 10 秒而我没有做任何事情,这种情况会发生很多。但它也可能发生在页面加载时。我不明白为什么。我的代码中是否有我没有看到的错误?
$(document).ready(function(){
$('#select-all').click(function(event) {
if(this.checked) {
// Iterate each checkbox
$(':checkbox').each(function() {
this.checked = true;
$('label.choice').toggleClass("choice-text-color");
});
} else {
$(':checkbox').each(function() {
this.checked = false;
$('label.choice').toggleClass("choice-text-color");
});
}
});
$("#selectAll").click(function() {
$('#select-all').click()
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="selectAll" class="btn btn-secondary my-2 my-sm-0"
type="button" name="selectAll">Select All</button>
<form>
<input type="checkbox" id="1"><label for="1" class="choice">ABC</label>
<input type="checkbox" id="2"><label for="2" class="choice">DEF</label>
(....etc.....)
<input type="checkbox" id="select-all" style="display: none;">
<input type="submit" style="display: none;">
</form>
【问题讨论】:
-
这段代码应该做什么?为什么是隐藏的复选框?如果单击“全选”按钮,为什么还要单击另一个隐藏项目然后全选,只需全选。无需遍历所有复选框以查看它们是否被选中,只需查询选中或未选中的复选框并应用适当的类。
-
您实际单击的全选按钮位于表单之外。这就是为什么有一个隐藏的复选框用于选择所有与外部按钮相关的复选框。正如我在解释中所说,这段代码有时可以完美运行。我想知道为什么它不能 100% 工作。
-
我的第一个猜测是它与
$(':checkbox').each...有关。我认为这将包括select-all复选框。也许这会造成意外……?删除display: none,看看它是否按照你的想法做。 -
按钮是在
form内部还是外部对于您在此处使用的功能而言没有区别。将一个按钮绑定到另一个按钮的功能在这里没有实际用途或需要。所以,我再次问,你想在这里做什么,只是有一个“全选”按钮?如果我们让您的代码更简洁并直截了当,您的问题就会迎刃而解。 -
我希望用户能够单击表单外部标记为“#selectAll”的按钮(用于显示目的)并选中所有复选框。到目前为止,它对我有用的唯一方法是将该按钮绑定到标记为“#select-all”的隐藏复选框,然后让 jquery 运行循环。它有时有效,有时无效。
标签: javascript jquery html css checkbox