如何检查多个复选框中是否至少选中了一个复选框?
How to check that at least one checkbox is checked in multiple checkboxes?
在我的表单中使用了很多复选框。我想检查是否至少选中了一个复选框。
<div id="sun">
<li><?php echo $this->__("SUN");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Sunday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Sunday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Sunday][6-9]" value="6PM - 9PM"></li>
</div>
<div id="mon">
<li><?php echo $this->__("MON");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Monday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Monday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Monday][6-9]" value="6PM - 9PM"></li>
</div>
<div id="tue">
<li><?php echo $this->__("TUE");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Tuesday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Tuesday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Tuesday][6-9]" value="6PM - 9PM"></li>
</div>
<div id="wed">
<li><?php echo $this->__("WED");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Wednesday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Wednesday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Wednesday][6-9]" value="6PM - 9PM"></li>
</div>
如何验证至少一个复选框被选中?
大致如下:
var formNodes = document.checks.getElementsByTagName('input');
for (var i=0;i<formNodes.length;i++) {
/* If one is true set a variable to true and exit the loop */
}
堆栈溢出postHere
干杯,
特鲁兹
var count= 0;
var value_array=new Array();
jQuery('input[type="checkbox"]:checked').each(function(){
value_array.push(jQuery(this).val());
count = count + 1;
});
// count&value_array will tell you total selected
好吧,直截了当:
var isSomeAlldayCheckboxChecked = document
.querySelectorAll('input[type="checkbox"].allday')
.some(function (each) { return each.checked; });
@herby
的答案是检查 input[type='checkbox']
数组中的某些输入是否被检查的正确答案。
这个答案 returns 使用 querySelectorAll (MyFormManager.get_checkedInputs
) 的检查输入数组;它演示了将事件侦听器添加到查询 input
元素 change
事件 (MyFormManager.init
) - 它将检查状态附加到元素 (MyFormManager.onCheckChanged
) 的 className
- 促进流程。
var MyFormManager = {
checkboxes: null,
onCheckChanged: function(sender, e) {
console.log("sender:= %o, e:= %o", sender, e);
sender.className = sender.className.replace(' true','').replace(' false','');
sender.className += ' ' + String(sender.checked);
},
init : function() {
checkboxes = document.querySelectorAll("input[type='checkbox']");
for (var i = 0, max = checkboxes.length; i < max; i++)
{
checkboxes[i].addEventListener('change', MyFormManager.onCheckChanged.bind(null, checkboxes[i]));
}
},
get_checkedInputs : function() {
return document.querySelectorAll("input[type='checkbox'].true");
}
}
console.log(MyFormManager);
MyFormManager.init();
var message = document.querySelector("div#message");
document.querySelector("button#runCheck").addEventListener("click", function (e) {
var checkedInputs = MyFormManager.get_checkedInputs();
console.log(checkedInputs);
message.innerHTML = "";
var parentId;
for (var i = 0, max = checkedInputs.length; i < max; i++)
{
parentId = checkedInputs[i].parentNode.parentNode.parentNode.id;
message.innerHTML += '<div class="item"><span class="parentId">' + parentId + '</span><span class="checkedInput">' + checkedInputs[i].value + '</span></div>';
}
});
body {background-color:whitesmoke;}
div { display:block;}
div > ul {
list-style:none;
margin:0.5em auto 0 auto;
padding:0.27em;
background-color:white;
border:0.05cm solid silver;
}
input[type='checkbox'] {cursor:pointer;}
div:first-child > ul:first-child {margin-top:0em;}
div > ul > li {list-style:none;}
div > ul > li > label {display:inline-block;padding:0.1em 0.3em;margin:0;width:8em;text-align:right;}
div.item {display:block;}
div.item > span.parentId {display:inline-block;width:3em;text-transform:uppercase;}
div.item > span.checkedInput {display:inline-block;width:8em;text-align:right;}
<div id="debugger">
<div id='message'></div>
<button id='runCheck'>Run Check</button>
</div>
<div id="sun">
<ul>
<li><!-- <?php echo $this->__("SUN");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Sunday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Sunday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Sunday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="mon">
<ul>
<li><!-- <?php echo $this->__("MON");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Monday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Monday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Monday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="tue">
<ul>
<li><!-- <?php echo $this->__("TUE");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Tuesday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Tuesday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Tuesday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="wed">
<ul>
<li><!-- <?php echo $this->__("WED");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Wednesday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Wednesday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Wednesday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="thur">
<ul>
<li><!-- <?php echo $this->__("THUR");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Thursday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Thursday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Thursday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="fri">
<ul>
<li><!-- <?php echo $this->__("FRI");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Friday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Friday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Friday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="sat">
<ul>
<li><!-- <?php echo $this->__("SAT");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Saturday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Saturday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Saturday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
请注意,这没有优化,也没有考虑动态控制(回发或 xhr);
如果您使用的是 supported browser,则可以利用 :checked 伪选择器进行非常简洁的检查。简单地做这样的事情:
if(document.forms[0].querySelector('input[type="checkbox"]:checked').length) {
//At least 1 checkbox is selected within document
}
确保通过 document.querySelector
或文档对象上的 document.forms
列表(如上所示)定位正确的表单。
您可以为此使用 Jquery。
if ($('#form_id :checkbox:checked').length > 0)
{
// one or more checkboxes are checked
}
else
{
// no checkboxes are checked
}
在我的表单中使用了很多复选框。我想检查是否至少选中了一个复选框。
<div id="sun">
<li><?php echo $this->__("SUN");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Sunday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Sunday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Sunday][6-9]" value="6PM - 9PM"></li>
</div>
<div id="mon">
<li><?php echo $this->__("MON");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Monday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Monday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Monday][6-9]" value="6PM - 9PM"></li>
</div>
<div id="tue">
<li><?php echo $this->__("TUE");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Tuesday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Tuesday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Tuesday][6-9]" value="6PM - 9PM"></li>
</div>
<div id="wed">
<li><?php echo $this->__("WED");?> </li>
<li><input class="allday" type="checkbox" name="availableday[Wednesday][9-12]" value="9AM - 12AM"></li>
<li><input class="allday" type="checkbox" name="availableday[Wednesday][12-6]" value="12PM - 6PM"></li>
<li><input class="allday" type="checkbox" name="availableday[Wednesday][6-9]" value="6PM - 9PM"></li>
</div>
如何验证至少一个复选框被选中?
大致如下:
var formNodes = document.checks.getElementsByTagName('input');
for (var i=0;i<formNodes.length;i++) {
/* If one is true set a variable to true and exit the loop */
}
堆栈溢出postHere
干杯,
特鲁兹
var count= 0;
var value_array=new Array();
jQuery('input[type="checkbox"]:checked').each(function(){
value_array.push(jQuery(this).val());
count = count + 1;
});
// count&value_array will tell you total selected
好吧,直截了当:
var isSomeAlldayCheckboxChecked = document
.querySelectorAll('input[type="checkbox"].allday')
.some(function (each) { return each.checked; });
@herby
的答案是检查 input[type='checkbox']
数组中的某些输入是否被检查的正确答案。
这个答案 returns 使用 querySelectorAll (MyFormManager.get_checkedInputs
) 的检查输入数组;它演示了将事件侦听器添加到查询 input
元素 change
事件 (MyFormManager.init
) - 它将检查状态附加到元素 (MyFormManager.onCheckChanged
) 的 className
- 促进流程。
var MyFormManager = {
checkboxes: null,
onCheckChanged: function(sender, e) {
console.log("sender:= %o, e:= %o", sender, e);
sender.className = sender.className.replace(' true','').replace(' false','');
sender.className += ' ' + String(sender.checked);
},
init : function() {
checkboxes = document.querySelectorAll("input[type='checkbox']");
for (var i = 0, max = checkboxes.length; i < max; i++)
{
checkboxes[i].addEventListener('change', MyFormManager.onCheckChanged.bind(null, checkboxes[i]));
}
},
get_checkedInputs : function() {
return document.querySelectorAll("input[type='checkbox'].true");
}
}
console.log(MyFormManager);
MyFormManager.init();
var message = document.querySelector("div#message");
document.querySelector("button#runCheck").addEventListener("click", function (e) {
var checkedInputs = MyFormManager.get_checkedInputs();
console.log(checkedInputs);
message.innerHTML = "";
var parentId;
for (var i = 0, max = checkedInputs.length; i < max; i++)
{
parentId = checkedInputs[i].parentNode.parentNode.parentNode.id;
message.innerHTML += '<div class="item"><span class="parentId">' + parentId + '</span><span class="checkedInput">' + checkedInputs[i].value + '</span></div>';
}
});
body {background-color:whitesmoke;}
div { display:block;}
div > ul {
list-style:none;
margin:0.5em auto 0 auto;
padding:0.27em;
background-color:white;
border:0.05cm solid silver;
}
input[type='checkbox'] {cursor:pointer;}
div:first-child > ul:first-child {margin-top:0em;}
div > ul > li {list-style:none;}
div > ul > li > label {display:inline-block;padding:0.1em 0.3em;margin:0;width:8em;text-align:right;}
div.item {display:block;}
div.item > span.parentId {display:inline-block;width:3em;text-transform:uppercase;}
div.item > span.checkedInput {display:inline-block;width:8em;text-align:right;}
<div id="debugger">
<div id='message'></div>
<button id='runCheck'>Run Check</button>
</div>
<div id="sun">
<ul>
<li><!-- <?php echo $this->__("SUN");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Sunday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Sunday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Sunday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="mon">
<ul>
<li><!-- <?php echo $this->__("MON");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Monday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Monday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Monday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="tue">
<ul>
<li><!-- <?php echo $this->__("TUE");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Tuesday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Tuesday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Tuesday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="wed">
<ul>
<li><!-- <?php echo $this->__("WED");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Wednesday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Wednesday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Wednesday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="thur">
<ul>
<li><!-- <?php echo $this->__("THUR");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Thursday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Thursday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Thursday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="fri">
<ul>
<li><!-- <?php echo $this->__("FRI");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Friday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Friday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Friday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
<div id="sat">
<ul>
<li><!-- <?php echo $this->__("SAT");?> --></li>
<li>
<label>9AM - 12PM</label>
<input class="allday" type="checkbox" name="availableday[Saturday][9-12]" value="9AM - 12PM">
</li>
<li>
<label>12PM - 6PM</label>
<input class="allday" type="checkbox" name="availableday[Saturday][12-6]" value="12PM - 6PM">
</li>
<li>
<label>6PM - 9PM</label>
<input class="allday" type="checkbox" name="availableday[Saturday][6-9]" value="6PM - 9PM">
</li>
</ul>
</div>
请注意,这没有优化,也没有考虑动态控制(回发或 xhr);
如果您使用的是 supported browser,则可以利用 :checked 伪选择器进行非常简洁的检查。简单地做这样的事情:
if(document.forms[0].querySelector('input[type="checkbox"]:checked').length) {
//At least 1 checkbox is selected within document
}
确保通过 document.querySelector
或文档对象上的 document.forms
列表(如上所示)定位正确的表单。
您可以为此使用 Jquery。
if ($('#form_id :checkbox:checked').length > 0)
{
// one or more checkboxes are checked
}
else
{
// no checkboxes are checked
}