Опубликовать массив из нескольких значений флажков - PullRequest
8 голосов
/ 13 октября 2009

Почему в сценарий на стороне сервера отправляется только одно значение массива флажков "db"?

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>

Редактировать : Я ответил на свой вопрос, но есть ли у кого-нибудь документация (или объяснение), почему это необходимо? Мне было трудно найти точный ответ (таким образом, посмертный пост).

Ответы [ 4 ]

15 голосов
/ 13 октября 2009

Я согласен с @jjclarkson. Просто добавьте вместо того, чтобы помещать свои идентификаторы в массив, вы можете использовать $. 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;
});
5 голосов
/ 24 сентября 2011
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); }
});
4 голосов
/ 13 октября 2009

Вам нужно иметь квадратные скобки, чтобы указать массив [] для переданного имени переменной.

{'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 голос
/ 03 декабря 2009

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

затем взорваться в PHP $mycheckboxes = explode(',',$_GET['mycheckboxes']);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...