对 jquery 来说有点新,我有一个多答案测验问题。在我添加自定义错误消息之前,它工作正常。
该问题有多个正确答案,这些答案会根据顶部的变量进行检查。我希望问题还检查他们是否选择了所有复选框或没有复选框。它通过警报消息向用户提供反馈。
下面是我的 jsfiddle...单击“提交”按钮而不选中任何框,您将看到自定义警报显示两次(第二个警报错误)。然后注释掉替换警报框的js代码的第一行“window.alert”,它将显示一个错误,然后显示另一个错误(理想方式)。
有没有更好的方法可以构建我的 if 语句以同时检查框检查的数量和正确的答案?
<p>Please select the 5 correct answers:</p>
<label><input type="checkbox" name="q1" class="wrong"></input>Answer 0 </label>
<label><input type="checkbox" name="q1" id="q1-a"></input>Answer 1</label>
<label><input type="checkbox" name="q1" class="wrong"></input>Answer 2 </label>
<label><input type="checkbox" name="q1" id="q1-b"></input>Answer 3</label>
<label><input type="checkbox" name="q1" id="q1-c" ></input>Answer 4 </label>
<label><input type="checkbox" name="q1" id="" class="wrong"></input>Answer 5</label>
<label><input type="checkbox" name="q1" id="" class="wrong"></input>Answer 6</label>
<label><input type="checkbox" name="q1" id="q1-d" ></input>Answer 7</label>
<label><input type="checkbox" name="q1" id="q1-e" ></input>Answer 8</label>
<br />
<button class="submit1">Submit1</button>
<div id="messageBox"> </div>
#messageBox {
position: fixed;
top:40%;
left: 20px;
width: 240px;
height:auto;
font-family: Arial, Helvetica, Sans-Serif;
font-size: 12px;
background-color:#F93;
color: #FFFFFF;
padding: 6px;
display: none;
border: 1px solid #ccc;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
box-shadow: 8px 8px 8px #000;
padding: 1em;
}
window.alert = function(message) {
$('#messageBox').text(message).fadeIn().delay(1000).fadeOut('slow');
//comment out this bit of code and you can see my issue.
}
$(function(){
//correct answers stored here by id
var rules = ['q1-a,q1-b,q1-c,q1-d,q1-e'];
$('.submit1').click(function(e) {
e.preventDefault();
///checks to see how many checkboxes have been clicked
var countchecked1 = $("input[name=q1]:checked").length;
if(countchecked1 == 0)
{
alert("You have not selected any checkboxes.");
}
if(countchecked1 == 9)
{
alert("Cheating.. You can't select all the boxes.");
$('input[name=q1]:checked').removeAttr('checked');
return false;
}
//check correct answers from var above
if( $('input[name=q1]:checked').map(function(i,v) { return v.id; }).get().join(',') == rules[0] ) {
alert("Correct! you selected the correct answers. ");
return false;
}
else
{
$('input[type="checkbox"].wrong:checked').parent('label').addClass('highlight');
$('.wrong:checked').attr('disabled', 'disabled');
$('.wrong:checked').removeAttr('checked');
alert("Incorrect... Please try again");
return false;
}
});
});