2013-01-23 34 views
1

我正在期待JavaScript验证表单的复选框,但我无法让我的代码抛出错误消息。验证根据单选按钮选择的复选框的数量

如果选择3daypass单选按钮,在一定部分#matthewpeckham 3个复选框应选择等,这是我已经运行的onSubmit()的代码:

function chooseDaysCorrect() { 

var totalDaysChecked = 0; 
var totalDaysChecked = $('#matthewpeckham').find("[type='checkbox']:checked").length; 

if (document.getElementById('3daypass').checked && totalDaysChecked != 3) { 
    alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
    return false; 
} 
else if (document.getElementById('2daypass').checked && totalDaysChecked != 2) { 
    alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
    return false; 
} 
else if (document.getElementById('1daypass').checked && totalDaysChecked != 1) { 
    alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
    return false; 
} 
else { 
    return true; 
} 


} 

("[type='checkbox']:checked").length计数正确的方法已选择的复选框数量?我哪里错了?

我也曾尝试上运行的形式提交功能通过以下方式,但这并不工作之一:

$(document).ready(function() { 

$('#classic').submit(function() { 

    var totalDaysChecked = 0; 
    var totalDaysChecked = $('#matthewpeckham').find("[type='checkbox']:checked").length; 

    if (document.getElementById('3daypass').checked && totalDaysChecked != 3) { 
     alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
     return false; 
    } 
    else if (document.getElementById('2daypass').checked && totalDaysChecked != 2) { 
     alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
     return false; 
    } 
    else if (document.getElementById('1daypass').checked && totalDaysChecked != 1) { 
     alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
     return false; 
    } 
    else { 
     return true; 
    } 

}); 

}); 
+0

这样应能正常工作。你有没有尝试'#matthewpeckham'选择器?没有':checked'? – Jon

+0

另外,HTML 4不允许id属性以数字开头,所以'3daypass','2daypass'可能会被怀疑。你有没有尝试改变这些? – Jon

+0

我已经尝试了所有这些建议,但它仍不显示错误。对单选按钮的其他验证工作,因此它不能是ID名称。我也尝试过'onSubmit =“chooseDaysCorrect();”'和'onSubmit =“return chooseDaysCorrect();”'如果是这样,但没有任何东西。 – mpdc

回答

1

我建议下面的代码,首先创建表单像往常一样,和每个复选框添加自定义数据 - *字段所需的值来寻找:

HTML:

<form class="classic" id="classic"> 
    <input type="checkbox" id="3daypass" data-expected="3" ></input> 
    <input type="checkbox" id="2daypass" data-expected="2" ></input> 
    <input type="checkbox" id="1daypass" data-expected="1" ></input> 
    <input type="submit" value="click"></input> 
</form> 

$(document).ready(function() { 

$( “#形式的经典”)提交(函数(){

totalDaysChecked = $("[type='checkbox']:checked").length 
    $("[type='checkbox']:checked").each(function(index, value) { 
     if($(value).attr('data-expected') != totalDaysChecked) { 
      alert("Please select enough days for your chosen delegate pass from the CONFERENCE PASS section above"); 
     } else { 
      return true 
     } 
    }); 
return false; 

}) })

这里试试:http://jsbin.com/ipazow/1/