web-dev-qa-db-ja.com

チェックボックスをループして、チェックボックスをオンまたはオフにします

ちょっとした問題に遭遇しました。ここに簡単な説明があります。

標準フォームには12個のチェックボックスがあります。私がする必要があるのは、それらのそれぞれをループして、どれがチェックされ、どれがチェックされていないかを知ることです。

これを使用して、データベースフィールドに入力する文字列を作成できます。以下に例を示します。

(チェック1-チェック)
(チェック2-チェックなし)
(Check3-チェック済み)

1,0,1

これまでのところ、私はこのコードを少し持っています。

$('input[type=checkbox]').each(function () {
           if (this.checked) {
               console.log($(this).val()); 
           }
});

すべてではなく、チェックされたものだけを戻すことを除いて、完全に機能します。

Newbの質問でごめんなさい。私はjqueryが初めてです。

71
Richard M

表示する形式で結果文字列を正確に作成するには、これを使用できます。

var sList = "";
$('input[type=checkbox]').each(function () {
    sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")";
});
console.log (sList);

ただし、@ SLaksには同意します。これをデータベースに格納する構造を再検討する必要があると思います。

EDIT:申し訳ありませんが、探している出力形式を読み間違えました。更新は次のとおりです。

var sList = "";
$('input[type=checkbox]').each(function () {
    var sThisVal = (this.checked ? "1" : "0");
    sList += (sList=="" ? sThisVal : "," + sThisVal);
});
console.log (sList);
116
Ed Schembor

セレクターを使用する

次のようなすべてのチェックされたチェックボックスを取得できます。

var boxes = $(":checkbox:checked");

そして、このようにすべてチェックされていない:

var nboxes = $(":checkbox:not(:checked)");

これらのコレクションのいずれかを循環して、それらの名前を保存するだけです。何かが欠けている場合は、それがチェックされたか、チェックされなかったかがわかります。 PHPでは、チェックされた名前の配列がある場合、単に in_array() リクエストを実行して、後日特定のボックスをチェックするかどうかを知ることができます。

シリアライズ

jQueryには、フォームコントロールの状態を維持する serialize method もあります。たとえば、jQueryのWebサイトで提供されている例は次のとおりです。

single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2

これにより、どの要素がチェックされたかに関する情報も保持できます。

59
Sampson

$(':checkbox').each(...)と記述することで、すべてのチェックボックスをループできます。

あなたの質問を正しく理解していれば、次のコードを探しています。

var str = "";

$(':checkbox').each(function() {
    str += this.checked ? "1," : "0,";
});

str = str.substr(0, str.length - 1);    //Remove the trailing comma

このコードはすべてのチェックボックスをループし、1,または0,のいずれかを文字列に追加します。

15
SLaks

元の投稿で取り上げたスキーマの考慮事項に十分な時間が注意を払っていなかったと思います。だから、ここでは初心者のために考慮すべきことがあります。

先に進んでこのソリューションを構築したとしましょう。あなたの初期値はすべて単一の値にまとめられ、データベースに保存されます。確かに、データベースのスペースを少し節約し、コーディングの時間をいくらか節約しています。

ここで、現在のチェックボックス3と4の間に新しいチェックボックスを追加するという頻繁で簡単なタスクを実行する必要があることを考えてみましょう。

したがって、UIにチェックボックスを追加します(簡単な部分)。ループコードは、チェックボックスの数に関係なく、すでに値を連結しています。また、データベースフィールドは単なるvarcharまたは他の文字列型であるため、同様に問題ないはずです。

顧客または変更前のデータを表示しようとするとどうなりますか?あなたは本質的に左から右にシリアル化しています。ただし、3以降の値はすべて1文字ずれています。既存のすべてのデータで何をしますか?アプリケーションを作成し、データベースからそれをすべて引き出し、新しい質問位置のデフォルト値を追加するためにそれを処理してから、データベースにすべて保存しますか?週または月ごとに複数の新しい値があるとどうなりますか?ロケーションを移動し、jQueryがそれらを異なる順序で処理するとどうなりますか?すべてのデータはホースで固定されており、再配置するには再処理する必要があります。

緊密なキーと値の関係を提供しないという概念全体がludacrisであり、遅かれ早かれよりも早くトラブルに巻き込まれることになります。これを検討している人のために、しないでください。スキーマ変更に関する他の提案は問題ありません。子テーブル、メインテーブルの追加フィールド、質問/回答テーブルなどを使用します。そのデータの構造が変更される可能性がある場合は、ラベルのないデータを保存しないでください。

0
Nathon