2

以上のことから、ラジオ ボタンをクリックして、選択したグループに少なくとも 1 つのエントリがあるかどうかを確認するために実行する次のコードを用意しました。

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");
    }
});

アラートが表示されるので、アラートが届いていることはわかっていますが、ラジオ ボタンがチェックされていません。ただし、このコードを削除すると、正常に動作します。これがなぜこれを引き起こすのでしょうか?

前もって感謝します!

4

2 に答える 2

2

falseイベント ハンドラーから戻ると、そのイベントの既定のアクションが発生しなくなります。ラジオ ボタンをクリックした場合、デフォルトのアクションは、そのラジオ ボタンを選択することです (そして、そのグループ内で以前に選択されたものを選択解除します)。

「選択したグループに少なくとも 1 つのエントリがあるかどうかを確認するためにラジオ ボタンがクリックされたとき」

ここで何を達成しようとしているのか理解できません。特定のグループで最大 1 つのラジオしかチェックできないため、「少なくとも 1 つ」は意味がありません。ユーザーは特定のグループ内のすべてのラジオのチェックを外すことができないため、最初に何もチェックされていない場合にのみ、グループ内の 1 つ未満が発生する可能性があります。

そうは言っても、一般的な意味で、コードは単純化できます。

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('');
});
于 2012-07-20T04:14:49.987 に答える
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');
});
于 2012-07-20T04:24:13.177 に答える