检查所有单选按钮是否为真



我有8个(4个是+ 4个否)单选按钮,最后一对按钮是'以上所有(是/否)'。我如何检查是否所有的单选(1-3)YES都被选中,以便我可以将最后一个按钮设置为YES?

  1. 是否检查A
  2. 是否检查B
  3. 是否检查C
  4. 是否以上全部

这是我拙劣的尝试(工作),但我知道它写得很差

//EXAMS
<input type="radio" class="yes-radio" name=""> YES
<input type="radio" class="no-radio" name=""> NO
..
..
//ALL OF THE ABOVE
<input type="radio" class="yes-radio-all" name=""> YES
<input type="radio" class="no-radio-all" name=""> NO

//inside click event
var totalyes = $('.yes-radio').length;
var totalno = $('.yes-radio').length;
var yes = $('.yes-radio:checked').length;
var no = $('.no-radio:checked').length;
if (totalyes == yes) {
$('.yes-radio-all').attr('checked', true);
}
if (totalno == no) {
$('.no-radio-all').attr('checked', true);
}

我简化了,而不是实际的代码,但你会明白我的意思。我想一定有某种循环或foreach可以解决我的问题。

谢谢!

您可以将jQuery选择转换为数组,然后使用标准的every()方法。

if ($('.yes-buttons').get().every(button => button.checked)) {
$('.yes-radio-all').prop('checked', true);
} else if ($('.no-buttons').get().every(button => button.checked)) {
$('.no-radio-all').prop('checked', true);
}

你不需要做循环。在这种情况下,这不是什么大问题,但通常依赖浏览器内置功能比自定义实现更有效。

同样,根据定义,简单循环的时间复杂度为O(n),其中(取决于课程的实现)css选择器的复杂度为O(1)。同样,考虑到您只迭代一些东西,这里不是什么大问题。

您还可以通过检查是否有未选中的复选框来减少选择器的数量,而不是先计算所有的复选框,然后再计算所有已选中的复选框:

// Check if all yes-radios are checked.
const allYes = !$('.yes-radio:not(:checked)').length;
$('.yes-radio-all').prop('checked', allYes);
// Check if all no-radios are checked.
const allNo = !$('.no-radio:not(:checked)').length;
$('.no-radio-all').prop('checked', allNo);

最新更新