2009-05-26 5 views
25

Comment passer plusieurs cases à cocher en utilisant jQuery ajax postComment passer plusieurs cases à cocher en utilisant jQuery ajax post

c'est la fonction ajax

function submit_form(){ 
$.post("ajax.php", { 
selectedcheckboxes:user_ids, 
confirm:"true" 
}, 
function(data){ 
    $("#lightbox").html(data); 
    }); 
} 

et c'est ma forme

<form> 
<input type='checkbox' name='user_ids[]' value='1'id='checkbox_1' /> 
<input type='checkbox' name='user_ids[]' value='2'id='checkbox_2' /> 
<input type='checkbox' name='user_ids[]' value='3'id='checkbox_3' /> 
<input name="confirm" type="button" value="confirm" onclick="submit_form();" /> 
</form> 

Répondre

46

De les documents jquery pour POST (3rd example):

$.post("test.php", { 'choices[]': ["Jon", "Susan"] }); 

Donc, je voudrais juste itérer sur les cases cochées et construire la matrice. Quelque chose comme

var data = { 'user_ids[]' : []}; 
$(":checked").each(function() { 
    data['user_ids[]'].push($(this).val()); 
}); 
$.post("ajax.php", data); 
+0

Merci pour l'aide – ahmed

+0

je suis toujours incapable de POST il .. il donne l'objet objet si je fais un window.alert pour les données ... où peut le problème être ?? – mkamthan

+0

Ne devrait-il pas être data.user_ids.push ($ (this) .val()); ? –

2

Si vous n'êtes pas mis sur rouler votre propre solution, consultez ce plugin jQuery:

malsup.com/jquery/form/

Il fera cela et plus pour toi. C'est fortement recommandé.

9

Pourrait utiliser ce qui suit, puis exploser le résultat de publication explode(",", $_POST['data']); pour obtenir un tableau de résultats.

var data = new Array(); 
$("input[name='checkBoxesName']:checked").each(function(i) { 
    data.push($(this).val()); 
}); 
+0

dans "input [name = 'checkBoxesName']: coché" ne pas oublier de mettre "[]" dans le nom du checkBoxesName, de cette façon: "input [name = 'checkBoxesName []']: checked" – Zanoldor

14

Nous venons tout juste de tenter de trouver une solution au même problème. Implémentation de la solution de Paul J'ai fait quelques ajustements pour que cette fonction fonctionne correctement.

var data = { 'venue[]' : []}; 

$("input:checked").each(function() { 
    data['venue[]'].push($(this).val()); 
}); 

En bref, l'addition d'entrée: vérifié par opposition à: vérifier l'entrée des limites des champs dans le tableau pour seulement les cases du formulaire. Paul est en effet correct avec this devant être joint comme $(this)

6

Voici une manière plus flexible. Disons que ceci est votre forme.

<form> 
<input type='checkbox' name='user_ids[]' value='1'id='checkbox_1' /> 
<input type='checkbox' name='user_ids[]' value='2'id='checkbox_2' /> 
<input type='checkbox' name='user_ids[]' value='3'id='checkbox_3' /> 
<input name="confirm" type="button" value="confirm" onclick="submit_form();" /> 
</form> 

Et ceci est votre jquery ajax ci-dessous ...

Et dans votre ajax.php, vous essayez d'écho ou print_r votre message pour voir ce qui se passe à l'intérieur. Cela devrait ressembler à ceci. Seules les cases cochées seront retournées. Si vous n'en avez pas coché, il retournera une erreur.

<?php 
    print_r($_POST); // this will be echoed back to you upon success. 
    echo "This one too, will be echoed back to you"; 

Espérons que ce soit assez clair.

0

Ce serait mieux et facile

var arr = $('input[name="user_ids[]"]').map(function(){ 
    return $(this).val(); 
}).get(); 

console.log(arr); 
1

qui suit de Paul Tarjan a travaillé pour moi,

var data = { 'user_ids[]' : []}; 
$(":checked").each(function() { 
    data['user_ids[]'].push($(this).val()); 
}); 
$.post("ajax.php", data); 

mais j'avais plusieurs formes sur ma page et tiré cases cochées de tous formulaires, donc j'ai fait la modification suivante de sorte qu'il a seulement tiré d'une forme,

var data = { 'user_ids[]' : []}; 
$('#name_of_your_form input[name="user_ids[]"]:checked').each(function() { 
    data['user_ids[]'].push($(this).val()); 
}); 
$.post("ajax.php", data); 

Il suffit de modifier nom_de_votre_formulaire au nom de votre formulaire.

Je mentionnerai également que si un utilisateur ne vérifie aucune case, aucun tableau n'est écrit en PHP. Je avais besoin de savoir si un utilisateur non coché toutes les cases, donc j'ajouté ce qui suit à la forme,

<input style="display:none;" type="checkbox" name="user_ids[]" value="none" checked="checked"></input> 

De cette façon, si aucune case cochée, il conservera tout de même le tableau avec une valeur de « none ».

Questions connexes