0

フォームに、はい/いいえのラジオ オプションを含む 3 つの質問があります。いずれかが「はい」の場合、4 番目の質問が表示されます。3 つの質問すべてが No にリセットされた場合、4 番目の質問を再び非表示にするのに苦労しています。おそらく存在しないケースですが、徹底したいと思います。

各質問のクリック時にトリガーされるカスタム関数を作成しました (value != 'Yes' の場合)。残りの値を確認してから 4 番目を更新しますが、それらの値が更新されていないようです。関数 stay = 'Yes' の q6、q7、および q8。私の関数はライブフォームにアクセスできると思っていましたが、何か間違ったことをしているに違いありませんか?

        //question_6exp
    $("[name = question_6]").change(function()
    {
        if ( $(this).val() == 'Yes' )
        {
            $("#question_6exp").show();
            $("#question_9").show();
        }
        else
        {
            $("#question_6exp").hide();
            $("#question_9").hide_question9();
        }
    });

    //question_7exp
    $("[name = question_7]").change(function()
    {
        if ( $(this).val() == 'Yes' )
        {
            $("#question_7exp").show();
            $("#question_9").show();
        }
        else
        {
            $("#question_7exp").hide();
            $("#question_9").hide_question9();
        }
    });

    //question_8exp
    $("[name = question_8]").change(function()
    {
        if ( $(this).val() == 'Yes' )
        {
            $("#question_8exp").show();
            $("#question_9").show();
        }
        else
        {
            $("#question_8exp").hide();
            $("#question_9").hide_question9();
        }
    });

    //function hide_question9()
    $.fn.hide_question9 = function()
    {


        var q6 = $("[name = question_6]").val();
        var q7 = $("[name = question_7]").val();
        var q8 = $("[name = question_8]").val();
        //alert('TEST: '+q6+q7+q8);
        if ( (q6 == 'No') && (q7 == 'No') && (q8 == 'No') )
        {
            //$("#question_9").hide();
            return this.hide();
        }
        else
            return false;
    }

更新: 以下で受け取った 2 つの応答に基づいてコードを更新しました。残念ながら、どちらも機能しませんでした。3 つの質問にクラスを追加して、それら 3 つだけを簡単に選択できるようにしました。JoDev のレイアウトを主に微調整しました。私はelse状態内のコードをコメントアウトし、そこでAguardienticoコードを試しました - 現在コメントアウトされています.

$(".temp1").change(function()
    {
        var myName = $(this).attr('name');

        if ( $(this).val() == 'Yes' )
        {
            $("#question_9").show();
            $("#"+myName+"exp").show();
        }
        else
        {//alert($(this).val());
            $("#"+myName+"exp").hide();

            var alltoNo = true;
            $(".temp1").each(function()
            {
                if ( $(this).val() == 'Yes' )
                {
                    alltoNo = false;
                }

                //return;
            });

            if ( alltoNo )
                $("[name = question_9]").hide();

            /*if ( $("[name=question_6][value=Yes]:checked").length == 0 )
                $("[name = question_9]").hide();*/
        }
    });
4

2 に答える 2

0

これはそれを行う最も簡単な方法です(ほんの始まりにすぎません)

$('[name^="question_"]:not([name="question_9"])').change(function() {
    if ( $(this).val() == 'Yes' )
    {
       $("#question_9").show();
       $("#question_"+$(this).attr('name').replace('question_', '')+"exp").show();
    } else {

       $("#question_"+$(this).attr('name').replace('question_', '')+"exp").hide();

       var alltoNO = true;
       $('[name^="question_"]:not([name="question_9"])').each(function() {
          if($(this).val() == 'Yes') {
             alltoNo = false;
          }
          return;
       });
       if(alltoNo) {
         $('[name="question_9"]').hide();
       }
    }
});
于 2013-10-25T17:12:34.600 に答える