如果所有复选框都未选中,则禁用按钮

Disable button if all checkboxes are unchecked

本文关键字:按钮 复选框 如果      更新时间:2023-09-26

我有一个复选框列表,如果它们都没有被选中,我需要禁用我的提交按钮,并在至少一个被选中时启用它。我看到了很多关于只使用单个复选框的建议,但我对如何使用多个复选框感到困惑。我想在这个项目中使用javascript,尽管我知道有一堆jquery的答案。这是我得到的——它适用于第一个复选框,但不适用于第二个复选框。

HTML:

 <input type="checkbox" id="checkme"/> Option1<br>
 <input type="checkbox" id="checkme"/> Option2<br>
 <input type="checkbox" id="checkme"/> Option3<br>
<input type="submit" name="sendNewSms" class="inputButton" disabled="disabled" id="sendNewSms" value=" Send " />
Javascript:

 var checker = document.getElementById('checkme');
 var sendbtn = document.getElementById('sendNewSms');
 // when unchecked or checked, run the function
 checker.onchange = function(){
if(this.checked){
    sendbtn.disabled = false;
} else {
    sendbtn.disabled = true;
}
}

我会将您的输入分组在一个容器中,并使用addEventListener观察事件。然后循环遍历复选框,检查它们的状态。最后将按钮设置为禁用,除非满足我们的条件。

var checks = document.getElementsByName('checkme');
var checkBoxList = document.getElementById('checkBoxList');
var sendbtn = document.getElementById('sendNewSms');
function allTrue(nodeList) {
  for (var i = 0; i < nodeList.length; i++) {
    if (nodeList[i].checked === false) return false;
  }
  return true;
}
checkBoxList.addEventListener('click', function(event) {
  sendbtn.disabled = true;
  if (allTrue(checks)) sendbtn.disabled = false;
});
<div id="checkBoxList">
  <input type="checkbox" name="checkme"/> Option1<br>
  <input type="checkbox" name="checkme"/> Option2<br>
  <input type="checkbox" name="checkme"/> Option3<br>
</div>
<input type="submit" name="sendNewSms" class="inputButton" disabled="disabled" id="sendNewSms" value=" Send " />

html

<input type="checkbox" class="checkme"/> Option1<br>
<input type="checkbox" class="checkme"/> Option2<br>
<input type="checkbox" class="checkme"/> Option3<br>
<input type="submit" name="sendNewSms" class="inputButton" disabled="disabled" id="sendNewSms" value=" Send " />

js

var checkerArr = document.getElementsByClassName('checkme');
var sendbtn = document.getElementById('sendNewSms');
// when unchecked or checked, run the function
for (var i = 0; i < checkerArr.length; i++) {
  checkerArr[i].onchange = function() {
    if(this.checked){
      sendbtn.disabled = false;
    } else {
      sendbtn.disabled = true;
    }
  }
}

我想这段代码会对你有所帮助

window.onload=function(){
var checkboxes = document.getElementsByClassName('checkbox')
 var sendbtn = document.getElementById('sendNewSms');
  var length=checkboxes.length;
  for(var i=0;i<length;i++){
    var box=checkboxes[i];
    var isChecked=box.checked;
    box.onchange=function(){
     sendbtn.disabled=isChecked?true:false;
    }
  }
 // when unchecked or checked, run the function
}
 
 <input type="checkbox" id="check1" class="checkbox"/> Option1<br>
 <input type="checkbox" id="check2" class="checkbox"/> Option2<br>
 <input type="checkbox" id="check3" class="checkbox"/> Option3<br>
<input type="submit" name="sendNewSms" class="inputButton" disabled="disabled" id="sendNewSms" value=" Send " />

的一些建议1.id总是唯一的。HTML不显示任何错误,如果你给多个对象具有相同的id,但当你试图得到它的文档。Getelementbyid它总是返回第一个,因为Getelementbyid返回单个元素

当有这样的需求时,您应该考虑使用类名或通过元素名进行搜索,因为getelementsbyclassname/tag返回一个数组

在标记中,我添加了一个额外的类来使用getelementsbyclassname

查询

为了避免添加额外的类,您还可以考虑使用document.querySelectorAll

检查下面的代码片段

window.onload=function(){
var checkboxes = document.querySelectorAll('input[type=checkbox]')
 var sendbtn = document.getElementById('sendNewSms');
  var length=checkboxes.length;
  for(var i=0;i<length;i++){
    var box=checkboxes[i];
    var isChecked=box.checked;
    box.onchange=function(){
     sendbtn.disabled=isChecked?true:false;
    }
  }
 // when unchecked or checked, run the function
}
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="check1" /> Option1<br>
 <input type="checkbox" id="check2" /> Option2<br>
 <input type="checkbox" id="check3" /> Option3<br>
<input type="submit" name="sendNewSms" class="inputButton" disabled="disabled" id="sendNewSms" value=" Send " />

希望能有所帮助

就像这样。我相信你可以用更少的代码做到这一点,但我仍然是一个JavaScript初学者。:)

<input type="checkbox" class="checkme" data-id="checkMe1"/> Option1<br>
<input type="checkbox" class="checkme" data-id="checkMe2"/> Option2<br>
<input type="checkbox" class="checkme" data-id="checkMe3"/> Option3<br>
<input type="submit" name="sendNewSms" class="inputButton" disabled="disabled" id="sendNewSms" value=" Send " />
JavaScript

//keep the checkbox states, to reduce access to the DOM
var buttonStatus = {
  checkMe1: false,
  checkMe2: false,
  checkMe1: false
};
//get the handles to the elements
var sendbtn = document.getElementById('sendNewSms');
var checkBoxes = document.querySelectorAll('.checkme');
//add event listeners
for(var i = 0; i < checkBoxes.length; i++) {
    checkBoxes[i].addEventListener('change', function() {
        buttonStatus[this.getAttribute('data-id')] = this.checked;
        updateSendButton();
    });
}
//check if the button needs to be enabled or disabled,
//depending on the state of other checkboxes
function updateSendButton() {
    //check through all the keys in the buttonStatus object
    for (var key in buttonStatus) {
        if (buttonStatus.hasOwnProperty(key)) {
            if (buttonStatus[key] === true) {
                //if at least one of the checkboxes are checked
                //enable the sendbtn
                sendbtn.disabled = false;
                return;
            }
        }
    }
    //disable the sendbtn otherwise
    sendbtn.disabled = true;
}

var check_opt = document.getElementsByClassName('checkit');
console.log(check_opt);
var btn = document.getElementById('sendNewSms');
function detect() {
  btn.disabled = true;
  for (var index = 0; index < check_opt.length; ++index) {
    console.log(index);
    if (check_opt[index].checked == true) {
      console.log(btn);
      btn.disabled = false;
    }
  }
}
window.onload = function() {
  for (var i = 0; i < check_opt.length; i++) {
    check_opt[i].addEventListener('click', detect)
  }
  // when unchecked or checked, run the function
}
<input type="checkbox" id="check1" class="checkit" />Option1
<br>
<input type="checkbox" id="check2" class="checkit" />Option2
<br>
<input type="checkbox" id="check3" class="checkit" />Option3
<br>
<input type="submit" name="sendNewSms" class="inputButton" disabled="true" id="sendNewSms" value=" Send " />