2009-10-12 16 views
8

"db"チェックボックス値の配列の1つの値だけがサーバー側スクリプトに送信されるのはなぜですか?複数のチェックボックス値の配列をポスト

のjQuery:

$(".db").live("change", function() { 
    $(this).add($(this).next("label")).add($(this).next().next("br")).remove().insertAfter(".db:last + label + br"); 
    var url = "myurl.php"; 
    var db = []; 
    $.each($('.db:checked'), function() { 
     db.push($(this).val()); 
    }); 
    if(db.length == 0) { 
     db = "none"; 
    }  
    $.post(url, {db: db}, function(response) { 
     $("#dbdisplay").html(response); 
    }); 
    return true; 
}); 

HTML:

<input type="checkbox" name="db[]" class="db" value="track"/><label for="track">track</label></br> 
<input type="checkbox" name="db[]" class="db" value="gps"/><label for="gps">gps</label></br> 
<input type="checkbox" name="db[]" class="db" value="accounting"/><label for="accounting">accounting</label></br> 

編集:私は自分の質問に答えることになったが、誰もがドキュメント(または説明)を持っていない理由のこれは必要ですか?私が正確な答え(したがって死後の記事)を見つけることは困難でした。

+0

は確かに、それは文書化されていますPHPで爆発、あなたが使用しているためphpをサーバーサイドスクリプトとして使用する場合は、http://www.php.net/manual/en/faq.html.php#faq.html.arraysとここをクリックしてください:http://www.php.net/manual/ en/language.variables.external.php –

+1

トピックのビットがない、ラベルの 'for'値は入力値ではなく入力IDです。 –

答えて

15

私は@jjclarksonに同意します。ただ、代わりに配列にあなたのIDをプッシュするので、追加するには、$.map使用することができます。

$(".db").live("change", function() { 
    $(this).add($(this).next("label")).add($(this).next().next("br")).remove().insertAfter(".db:last + label + br"); 
    var url = "myurl.php"; 

    var db = $('.db:checked').map(function(i,n) { 
     return $(n).val(); 
    }).get(); //get converts it to an array 

    if(db.length == 0) { 
     db = "none"; 
    }  
    $.post(url, {'db[]': db}, function(response) { 
     $("#dbdisplay").html(response); 
    }); 
    return true; 
}); 
+0

.map()を使用する方が効率的ですか? – jjclarkson

+0

@jjclarkson - わかりませんが、それはより短く、より目立ちます。つまり、私が$ .mapを発見するまで、$。各アプローチを使っていましたが、私は何の違いも気づいていませんでしたが、一般的には、中小規模のデータセットに違いはないと思います。 – karim79

4

提出された変数名に配列[]を指定するには、角括弧を使用する必要があります。

{'db[]': db} 

$(".db").live("change", function() { 
    $(this).add($(this).next("label")).add($(this).next().next("br")).remove().insertAfter(".db:last + label + br"); 
    var url = "myurl.php"; 
    var db = []; 
    $.each($('.db:checked'), function() { 
     db.push($(this).val()); 
    }); 
    if(db.length == 0) { 
     db = "none"; 
    }  
    $.post(url, {'db[]': db}, function(response) { 
     $("#dbdisplay").html(response); 
    }); 
    return true; 
}); 
1

$('input[name="mycheckboxes"]:checked').map(function(){ return $(this).val(); }).get().join(",");

が、その後 $mycheckboxes = explode(',',$_GET['mycheckboxes']);

5
var checkeditems = $('input:checkbox[name="review[]"]:checked') 
         .map(function() { return $(this).val() }) 
         .get() 
         .join(","); 
$.ajax({ 
    type: "POST", 
    url: "/index.php/openItems/", 
    data: "ids=" + checkeditems,           
    success: function(msg) { $(".mainContainer").html(msg); } 
}); 
関連する問題