3

所有,我有以下代码来检查我的所有单选按钮组是否都被选中:

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++){
        alert(i);
        var group  = radios.filter('[name=rating_value_'+i+']');
        alert(group.filter(":checked").length);
        if(group.filter(":checked").length==0){
            all_answered = false;
            break;
        }
    }
    if (all_answered) {
        // a group was found that didn't have an answer selected
        // so do something
        jQuery("#no_answers").html('');
    } 
});

这很适合做检查,但我有一个问题。此代码在实际单选按钮被标记为已单击之前运行,因此它认为仍有一个未单击,即使那是最后一个。我该如何解决这个问题,让它像我想象的那样工作?

4

2 回答 2

2

尝试使用change而不是click

http://api.jquery.com/change/

这应确保在实际选择选项后执行。

单击不起作用的原因是您在调用默认单击事件之前执行检查,默认单击事件将是选择实际单选按钮的事件。 看来我可能错了。但是,更改应该仍然有效。

于 2012-07-20T17:55:02.333 回答
2

我觉得我正在服用疯狂的药丸,因为我能够通过点击来实现它。这是我的代码:

$("input[type=radio]").click(function(event) {
    var all_answered = true;
    $('input:radio').each(function() {
        if (!$('input[name="' + $(this).attr("name") + '"]').is(':checked')) {
            all_answered = false;
        }
    });
    alert(all_answered);
});

这是我的小提琴在行动中展示它:http: //jsfiddle.net/F8kAH/5/

于 2012-07-20T18:24:35.047 回答