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 に答える