2009-05-26 26 views
25

Cómo pasar varias casillas de verificación utilizando jQuery ajax posteriorCómo pasar varias casillas de verificación utilizando jQuery ajax posterior

esta es la función ajax

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

y esta es mi forma

<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> 

Respuesta

46

De los documentos de jquery para POST (3rd example):

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

Así que simplemente iteraría sobre los recuadros marcados y construiría la matriz. Algo así como

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

Gracias por la ayuda – ahmed

+0

aún no puedo CORREGIRLO ... da objeto Objeto si hago una ventana.alerta de datos ... ¿dónde puede estar el problema? – mkamthan

+0

¿No debería ser data.user_ids.push ($ (this) .val()); ? –

2

Si usted no está configurado en el despliegue de su propia solución, echa un vistazo a este plugin jQuery:

malsup.com/jquery/form/

Se hará eso y más para tú. Es muy recomendado

9

Podría usar lo siguiente y luego explotar el resultado de la publicación explode(",", $_POST['data']); para dar una matriz de resultados.

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

en "input [name = 'checkBoxesName']: marcado" no olvide poner "[]" en el nombre del checkBoxesName, de esta manera: "input [name = 'checkBoxesName []']: checked" – Zanoldor

14

Acabo de encontrar esto tratando de encontrar una solución para el mismo problema. Implementando la solución de Paul He realizado algunas modificaciones para que esta función funcione correctamente.

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

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

En resumen, la adición de entrada: comprobado en contraposición a: activada límites los campos de entrada en la matriz a sólo las casillas de verificación en el formulario. Paul es realmente correcto con this que se debe incluir como $(this)

6

Aquí hay una manera más flexible.

digamos que este es su formulario.

<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> 

Y esta es su ajax jquery abajo ...

Y en su ajax.php, tratas eco o print_r su puesto para ver lo que está sucediendo en su interior. Esto debería verse así. Solo se devolverán las casillas de verificación que haya marcado. Si no marcó ninguno, devolverá un error.

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

Espero que sea lo suficientemente claro.

0

Esto sería mejor y más fácil

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

console.log(arr); 
1

La siguiente de Paul Tarjan trabajó para mí,

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

pero tenía múltiples formas en mi página y tirado cajas controladas de todo formas, así que hice la siguiente modificación por lo que solo sacó de un formulario,

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); 

Simplemente cambie name_of_your_form por el nombre de su formulario.

También mencionaré que si un usuario no marca ningún recuadro, entonces no aparecerá ninguna matriz en PHP. Necesitaba saber si un usuario sin marcar todas las casillas, por lo que añade lo siguiente a la forma,

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

De esta manera si se comprueban sin cuadros, todavía fijará la matriz con un valor de "ninguno".

Cuestiones relacionadas