1

インターネットを介してstackoverflowに多くの人がいて、同僚はチェックボックスに1または0以外の値を使用しています(例<input type='checkbox' value='check'/>)が、基本的にチェックボックスは常にはい/いいえの答えになると思います。

現在、次のようなアプリケーション全体で標準化するために作成したjQueryスクリプトを使用しています。

;(function($){
    $(document).ready(function() {
        var selector = 'input[type="checkbox"]';
        var c = 'checked';
        $.each($(selector),function(){
            var $el,value,attr;
            $el = $(this);
            value = $el.val();
            attr = $el.attr(c);
            if(value == 1 || typeof(attr) !== 'undefined')
            {
                $el.attr(c,c);
                $el.prop(c,true);
                $el.val(1);
            }
            else{
                $el.removeAttr(c);
                $el.prop(c,false);
                $el.val(0);
            }
        });
        $(selector).change(function(e){
            var $el, checked = null;
            $el = $(this);
            checked = $el.prop(c);
            if (checked) {
                $el.attr(c,c);
                $el.val(1);
            } else {
                $el.removeAttr(c);
                $el.val(0);
            }
        });
    });
})(jQuery);

これらの状況のいずれかを処理できるように:

<input type='checkbox' value='1'/>
<input type='checkbox' checked/>
<input type='checkbox' checked='checked'/>
<input type='checkbox' value='1' disabled/>
<input type='checkbox' checked disabled/>
<input type='checkbox' checked='checked' disabled/>
<input type='checkbox' value='0'/>
<input type='checkbox'/>
<input type='checkbox' value='0' disabled/>
<input type='checkbox' disabled/>

ただし、0または1でない、または属性が「チェックされている」チェックボックスの値は考慮されません。

私の質問は次のとおりです。0/null以外または1の値を使用するための良いユースケースはありますか(特にリレーショナルデータベースを使用する場合)?

4

1 に答える 1

4

次のことを考慮してください:「あなたの好きな果物を選んでください(該当するものをすべてチェックしてください)」。

あなたの方法:

<input type="checkbox" name="choice_apple" value="1" />
<input type="checkbox" name="choice_orange" value="1" />
<input type="checkbox" name="choice_durian" value="1" />

または、次のようなものを使用できます。

<input type="checkbox" name="choice[]" value="apple" />
<input type="checkbox" name="choice[]" value="orange" />
<input type="checkbox" name="choice[]" value="durian" />

バックエンドストレージシステムはこれとは無関係です。チェックボックスについて話しているだけです。メソッドには、3つの個別のフォームフィールド名が必要であり、選択した「値」が名前に埋め込まれています。その名前を抽出するには余分なオーバーヘッドが必要なので、実際に果物の名前をどこかに保存できます。

一方、「便利な値」バージョンでは、単一のフォームフィールドです。PHPは選択肢を配列に変換します。そして、余分な抽出/処理を必要とせずに、必要な正確な名前になります。

注意:選択されていないチェックボックスは、通常のフォーム送信では送信されません。そこにはすでに暗黙の真/偽があります。サーバーでチェックボックスのフィールド名を取得した場合は、チェックボックスが選択されています。

すでにうまく組み込まれたtrue/falseがあるので、true / falseが何を表すかを言うという追加のセマンティクスを重ねてみませんか?

于 2013-01-23T19:28:46.533 に答える