2009-10-12 15 views
8

Perché è presente un solo valore della matrice di valori "db" per l'array di valori inviato allo script lato server?Matrice di post di più valori di casella di controllo

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> 

Edit: ho finito di rispondere alla mia domanda, ma qualcuno ha documentazione (o una spiegazione) del perché questo è necessario? È stato difficile per me trovare la risposta esatta (quindi post postumo).

+0

Certo, è documentato, dal momento che si utilizza php come script lato server, controlla qui: http://www.php.net/manual/en/faq.html.php#faq.html.arrays e qui: http://www.php.net/manual/ en/language.variables.external.php –

+1

Un po 'fuori tema, il valore 'for' dell'etichetta dovrebbe essere l'id di input, non il valore di input. –

risposta

15

Sono d'accordo con @jjclarkson. Giusto per aggiungere, invece di spingere gli ID a un array, è possibile utilizzare $.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

E 'più efficiente usare .map()? – jjclarkson

+0

@jjclarkson - non sono sicuro, ma è più breve e più vista. Detto questo, ho usato l'approccio $ .each fino a quando ho scoperto $ .map, non ho notato alcuna differenza, ma in generale, non credo che si noterà alcuna differenza per un set di dati di piccole e medie dimensioni. – karim79

4

È necessario avere le parentesi quadre per specificare una matrice [] sul nome della variabile inviata.

{'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(",");

poi esplodere in PHP $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); } 
}); 
Problemi correlati