getElementsByTagName不起作用

时间:2014-03-05 09:55:01

标签: javascript

当我单击删除按钮而不单击任何复选框时,它应显示警告,但在此编码中,如果选中第一个复选框,则不会显示警告。如果选中第二个复选框,则会显示警告。

HTML:

    <div id="checkbox">
       <input type="CHECKBOX" name="MyCheckbox" class="checkbox"  value="This..." >
       <input type="CHECKBOX" name="MyCheckbox" class="checkbox"  value="This..." >
       <input type="CHECKBOX" name="MyCheckbox" class="checkbox"  value="This..." >
       <input type="CHECKBOX" name="MyCheckbox" class="checkbox"  value="This..." >
   </div>
        <form action="DeleteServer" onsubmit="return checkCheckBoxes(this);">
            <input type="SUBMIT" value="Delete!">
        </form>

脚本功能:

function checkCheckBoxes() {
    var chk = document.getElementById("checkbox").getElementsByTagName("input");
    for(var i=0; i<chk.length;i++){
       if (document.getElementById("checkbox").getElementsByTagName("input")[i].checked == false) 
       {
           alert ('You didn\'t choose any of the checkboxes!');
           return false;
       } else {    
           return true;
       }
      }
    }

3 个答案:

答案 0 :(得分:3)

getElementsByTagName中有 s 。它是复数。它返回一个NodeList而不是一个Element。

鉴于您的HTML,该NodeList将包含2个单独的input

你必须循环它(好像它是一个数组)并依次测试每个 checked的{​​{1}}属性。

答案 1 :(得分:2)

这可以解决您的问题:

var inputs     = document.querySelectorAll('#checkbox input');
    is_checked = false;

for(var i = 0; i < inputs.length; i++) {
    if(inputs[i].type == 'checkbox' && inputs[i].name == 'MyCheckbox') {
        is_checked = inputs[i].checked;
        if(is_checked) break;
    }
}

if(!is_checked){
  alert('You didn\'t choose any of the checkboxes!');
}

Here is a fiddle

答案 2 :(得分:0)

function checkCheckBoxes() {
      var inputs     = document.querySelectorAll('#checkbox input');
      is_checked = false;

        for(var i = 0; i < inputs.length; i++) {
            if(inputs[i].type == 'checkbox') {
                is_checked = inputs[i].checked;
                if(is_checked) return true;
            }
        }

        if(!is_checked){
          alert('You didn\'t choose any of the checkboxes!');
          return false;
        }
    }