全部, 当单击单选按钮以查看组中是否至少有一个条目被选中时,我已经运行了以下代码。
jQuery("input[type=radio]").click(function(event){
alert('it is clicked');
var num_questions = jQuery("#num_questions").val();
var new_questions = parseInt(num_questions) + 1;
for(var i=1; i<new_questions; i++){
var radios = jQuery("input[type=radio]");
var group = radios.filter('[name=rating_value_'+i+']');
if(group.filter(":checked").length==0){
var answers_to_questions = "false";
return false;
}else{
var answers_to_questions = "true";
jQuery("#no_answers").html('');
}
//alert((group.filter(":checked").length)?"checked":"not checked");
}
});
我收到警报,所以我知道它已到达那里,但是,没有检查单选按钮。但是,当我删除此代码时,它工作正常。任何想法为什么会导致这种情况发生?
提前致谢!
答案 0 :(得分:2)
从事件处理程序返回false
可防止发生该事件的默认操作。如果单击单选按钮,则默认操作是选择该单选按钮(并取消选择其组中之前选择的单选按钮)。
“单击单选按钮以查看组中是否至少有一个条目选择”
我无法理解你在这里想要达到的目标。 “至少一个”没有意义,因为在给定的组中最多只能检查一个无线电。只有在最初没有检查过的情况下,才能在组中少于一个,因为用户无法取消检查给定组中的所有无线电。
话虽如此,一般来说,您的代码可以简化:
jQuery("input[type=radio]").click(function(event){
var num_questions = jQuery("#num_questions").val(),
new_questions = parseInt(num_questions, 10) + 1,
radios = jQuery("input[type=radio]"),
all_answered = true;
for(var i=1; i<new_questions; i++){
if(radios.filter('[name=rating_value_'+i+']:checked').length===0){
all_answered = false;
break;
// return false; <------ don't return false or it cancels the click
}
}
if (!all_answered) {
// a group was found that didn't have an answer selected
// so do something
} else
jQuery("#no_answers").html('');
});
答案 1 :(得分:1)
尝试以下方法:
$("input[type=radio]").click(function(event){
var num_questions = parseInt($("#num_questions").val(), 10) + 1;
var unselected = 0;
for(var i = 1; i < new_questions; i++) {
if ($('input[name=rating_value_'+i+']:checked').length == 0 ) {
unselected++
}
}
$("#no_answers").html('there are ' + unselected + ' radio groups');
});