1

ラジオボタンの質問/回答のリストが煩わしいほど長い

A と B のどちらが好き
ですか x と yのどちらが好きですか

そういうタイプの質問です。

マークアップは次のようになります。

<input type="radio" name="User[AnnoyingQuestion][1]" value="1|Do you like x or y?|X" id="Member[PartyProfile]_1_0" />

<input type="radio" name="User[AnnoyingQuestion][1]" value="1|Do you like x or y?|Y" id="Member[PartyProfile]_1_1" class="elp-radio-question">

基本的に、すべての質問に回答済みであることを確認する必要があります。jQueryでこれを行うための良い戦略は何ですか?

4

4 に答える 4

4

証明: http://jsfiddle.net/iambriansreed/vXXUV/

フォーム セレクターをより正確に設定します。

<script>

    $(function(){

        $('form').submit(function(e){

            var radios = {}, success = true;

            $('input[type="radio"]').each(function(){

                 var name = $(this).attr('name');

                 if(name in radios) return true;                 

                 radios[name] = $('input[name="'+name+'"]:checked').length > 0;

            });    

            for(name in radios){
                if(!radios[name]){
                    success = false;
                    alert('Please enter a value for '+name);
                }
            }

            if(!success) e.preventDefault();

            else alert('Form Submitting...');

        });        

    });​

</script>
于 2012-04-17T19:51:53.800 に答える
1

この質問で提案されているように、jQuery 検証プラグインを使用できるはずです。

jQuery 検証プラグインを使用したラジオ ボタン グループの検証

検証プラグインのドキュメントは次のとおりです: http://docs.jquery.com/Plugins/Validation/Methods

于 2012-04-17T19:48:49.550 に答える
1

アップデート。これを試して

function allChecked() {
    var $inputs = $('input[type="radio"]');

    $.each($inputs,function(){
        var $this = $(this),
        name = $this.attr('name');

        if ($('input[name="' + name +'"]:checked').length < 1){
            return false;
        }
    });

    return true;
}

これは信じられないほど効率的ではありませんが、うまくいくと思います

于 2012-04-17T19:49:14.650 に答える
0

すべての質問に 2 つのオプションしかないことを前提として、これを行う簡単な方法を次に示します。チェックされたラジオ ボタンの数とラジオ ボタンの総数を比較します。チェックされたボックスの数が合計の半分に等しくない場合、何かがチェックされていません。

if( $('input[type=radio]:checked').length) == $('input[type=radio]').length/2) ...​​​​​​​​​​​​​​​​​​​
于 2012-04-17T20:01:36.907 に答える