-1

何らかの理由で私のコードが機能しない?! すべてが「チェックされていない」場合はチェックボックスをチェックする必要があり、非表示フィールドを有効にして値をデータベースに送信すると、チェックボックスがチェックされていないことを識別できます。

質問 1: jquery コードが機能しないのはなぜですか?

質問 2:チェック済みまたは未チェックの値を DB に記録する必要があります。私の計画は、phpで何も選択されていないかどうかを確認することです。これは良い習慣ですか?

HTML

<tr class="more_info">
        <th valign="top">Other options:</th>
        {foreach from=$HTML_cOPTIONS key=dbname item=optname}
            {if ! empty($CARINFO[car].{$dbname})}
                <td><input type="checkbox" id="forced_checkbox" name="c_options[]" value="{$dbname}" checked/> {$optname} </br></td>
            {else}
                <td><input type="checkbox" id="forced_checkbox" name="c_options[]" value="{$dbname}"/> {$optname} </br></td>
            {/if}
        {/foreach}
        <input type="hidden" id="forceSendCheckBox" name="c_options[]" value="nocheckboxes"/>
        <input type="button" value="Check" id="check" />
    </tr>

Jクエリ

$('#check').bind('click',function()
{
    if ($('#forced_checkbox').filter(':not(:checked)').length == 0) {
        console.log('at least one checked');
        $("#forceSendCheckBox").prop('disabled',true);//do not send this field to DB
    } else {
        console.log('nothing checked');
        $("#forceSendCheckBox").prop('disabled',false);//send empty checkboxes
    }
});

アップデート

ここにフィドルがありますが、まだ壊れているようです。:-/

http://jsfiddle.net/L5J96/

4

2 に答える 2

9

ID は一意である必要があります。代わりにクラスを使用してください。

あなたのフィドルでは、いくつかの問題がありました。まず、メニューから jQuery フレームワークを選択するのを忘れたため、jQuery コードはどれも機能しませんでした。次に、フィルタを からnot(:checked)に変更しましたが、 には変更して(:checked)いません。第 3 に、 がなければ、フィルター セレクターを括弧で囲むべきではありません。4 番目に、 を使用して入力フィールドにメッセージを表示しようとしましたが、正しい方法はです。== 0> 0not.text().val()

修正されたコードは次のとおりです。

$('#check').on('click', function () {
    if ($('.forced_checkbox').filter(':checked').length > 0) {
        $('#forceSendCheckBox').val('at least one checked');
    } else {
        $('#forceSendCheckBox').val('nothing checked');
    }
});

フィドル

于 2013-08-26T19:45:52.557 に答える
1

Barmar が述べたように、ID は一意でなければなりません。

次に、.on()代わりに.bind()- を使用します。同様の構文なので、簡単に実行できます。(.bind は非推奨)

ただし、質問に答えるには、チェックされていないチェックボックスをすべて選択して繰り返し処理することで、チェックされていないチェックボックスをすばやく見つけることができます。

どのチェックボックスがチェックされていないかのリストを作成する必要がある場合は、それぞれに固有のものを作成する必要があります (部屋にいるすべての男性の名前が「ボブ」である場合、茶色の髪のすべての男性の有用なリストを作成するのは困難です)。 . 下部の jsFiddle の例のように、ID 属性を使用します。

$("input:checkbox:not(:checked)").each(function() {
    alert($(this).attr('id')); 
});

ここでjsFiddle

これは、投稿で要求されているように、チェックされていないチェックボックスのリストを隠しフィールドに保存する方法を示す拡張された jsFiddle の例です。


jsFiddle に関しては、次の点を調整する必要がありました。

改訂された jsFiddle を参照してください

  1. .on()構文の使用。.on(document)または.on(body)代わりに使用します。

    $('document').on('action', '#elementID', function() { //Do stuff here });

  2. チェックされていないオブジェクトのコレクションを相互に処理するには、jQuery の.each()メソッドを使用する必要があります。

    $('.forced_checkbox').filter(':not(:checked)').each(function() { //Do stuff });

お役に立てれば。

于 2013-08-26T19:59:08.480 に答える