2010-11-22 8 views
0

ユーザーがフォームのチェックボックスをオンまたはオフにすると、グローバル配列を更新しようとしています。配列はサーバーに送信され、データベース内のチェックされたオプションが更新されます。 チェックされているチェックボックスのIDを配列にプッシュするだけの方法がありますが、どのように削除するのかはわかりません。チェックボックスでグローバル配列から特定の要素を削除するJavaScriptでチェックする/チェックを外す

私はここに証明するために、基本的なjsFiddleを作成しました

http://jsfiddle.net/ArFuz/

PS - あなたがチェックボックスのすべての上に毎回ループしているので、配列が適切

答えて

2

なぜフォームが送信されたときにちょうどそれを行うには、すべてのクリックでこの作業を行う - がある:あなたがではなく、また、使用することができます確認セレクタは、例えば

あなたは、名前/値の配列を構築するために、ここでシリアル化配列を使用することができ

を - 選択し、jyosephが示唆したように

にご興味を持っていない要素を反復。

$('#submitButton').click(function(ev){ 

    var ids = []; 

    $(':checkbox:checked').each(function(){ 

     ids.push(this.id); 

    }); 

    //do something with ids 

}); 
+0

問題は、表にページ番号があることです。ページが呼び出されるたびに、値を更新する投稿はありません。したがって、グローバル配列とすべてのチェック/アンチェック時に更新する必要があります。 – RyanP13

+1

@ RyanP13 Ah - 最新の要件を満たすニュース!この情報で私は上記のことを言っていないだろう! – redsquare

+1

P.Sすべてのチェックボックスでクリックイベントではなく、.delegateを使用します。 – redsquare

2

:)に後で名前空間たwillbeちょうど最初に配列を空にして、チェックされた項目を戻してください:

ids = []; 

if (this.checked) {  
    ids.push(this.id); 
} 
+0

私は '$(this)isis(" checked ")'をより効率的な 'this.checked'と' $(this).attr( "id" ) 'をより効率的な' this.id'で置き換えます。 OPのコードには小さなエラーがありましたが、これも修正されました。あなたの答えは+1。 –

+0

それは問題ありません - それを修正していただきありがとうございます。 – Jon

1

私はあなたがjQでうまくいくかもしれないと思いますueryでserializeArray()(api link

$('#myForm input[type=checkbox]').change(function(){ 

    // get all checked checkboxes 
    var ids = $('myForm input[type=checkbox]:checked').serializeArray(); 

}); 

EDIT:JSBin example

関連する問題