Me he encontrado con un pequeño problema. He aquí una breve explicación.
Tengo 12 casillas de verificación en un formulario estándar. Lo que tengo que hacer es recorrer cada uno de ellos y saber cuáles están marcados y cuáles no.
Usando esto, puedo construir una cadena que luego ingreso en un campo de base de datos. Aquí hay un ejemplo.
(Comprobación 1 - comprobado)
(Comprobación 2 - no comprobado)
(Comprobación 3 - comprobado)
1,0,1
Hasta ahora, tengo este fragmento de código.
$('input[type=checkbox]').each(function () {
if (this.checked) {
console.log($(this).val());
}
});
Funciona perfectamente excepto que solo recupera los marcados, no todos.
Perdón por la nueva pregunta. Soy un poco nuevo en jquery.
Respuestas:
Para crear una cadena de resultados exactamente en el formato que muestra, puede usar esto:
var sList = ""; $('input[type=checkbox]').each(function () { sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")"; }); console.log (sList);
Sin embargo, estoy de acuerdo con @SLaks, creo que debería reconsiderar la estructura en la que almacenará esto en su base de datos.
EDITAR : Lo siento, leí mal el formato de salida que estaba buscando. Aquí hay una actualización:
var sList = ""; $('input[type=checkbox]').each(function () { var sThisVal = (this.checked ? "1" : "0"); sList += (sList=="" ? sThisVal : "," + sThisVal); }); console.log (sList);
fuente
1
s y0
s.Usando selectores
Puede obtener todas las casillas de verificación marcadas de esta manera:
var boxes = $(":checkbox:checked");
Y todo sin marcar así:
var nboxes = $(":checkbox:not(:checked)");
Simplemente puede recorrer cualquiera de estas colecciones y almacenar esos nombres. Si falta algo, sabrá que se ha verificado o no. En PHP, si tiene una serie de nombres marcados, simplemente puede hacer una
in_array()
solicitud para saber si alguna casilla en particular debe marcarse en una fecha posterior.Publicar por fascículos
jQuery también tiene un método de serialización que mantendrá el estado de sus controles de formulario. Por ejemplo, el ejemplo proporcionado en el sitio web de jQuery sigue:
single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2
Esto le permitirá conservar la información para los elementos que se verificaron también.
fuente
Puede recorrer todas las casillas de verificación escribiendo
$(':checkbox').each(...)
.Si entiendo tu pregunta correctamente, estás buscando el siguiente código:
var str = ""; $(':checkbox').each(function() { str += this.checked ? "1," : "0,"; }); str = str.substr(0, str.length - 1); //Remove the trailing comma
Este código recorrerá todas las casillas de verificación y agregará
1,
o0,
a una cadena.fuente
No creo que se haya prestado suficiente atención a las consideraciones del esquema que se mencionaron en la publicación original. Entonces, aquí hay algo a considerar para cualquier novato.
Digamos que siguió adelante y creó esta solución. Todos sus valores de baja categoría se combinan en un solo valor y se almacenan en la base de datos. De hecho, está ahorrando [un poco] de espacio en su base de datos y algo de tiempo codificando.
Ahora consideremos que debe realizar la tarea fácil y frecuente de agregar una nueva casilla de verificación entre las casillas de verificación actuales 3 y 4. Su gerente de desarrollo, cliente, lo que sea, espera que esto sea un cambio simple.
Entonces agrega la casilla de verificación a la interfaz de usuario (la parte fácil). Su código de bucle ya concatenaría los valores sin importar cuántas casillas de verificación. También calcula que el campo de su base de datos es solo un varchar u otro tipo de cadena, por lo que también debería estar bien.
¿Qué sucede cuando los clientes o usted intenta ver los datos anteriores al cambio? Básicamente, estás serializando de izquierda a derecha. Sin embargo, ahora los valores después de 3 están todos desfasados en 1 carácter. ¿Qué vas a hacer con todos tus datos existentes? ¿Va a escribir una aplicación, sacarlo todo de la base de datos, procesarlo para agregar un valor predeterminado para la nueva posición de la pregunta y luego almacenarlo todo en la base de datos? ¿Qué sucede cuando tiene varios valores nuevos con una semana o un mes de diferencia? ¿Qué sucede si mueve las ubicaciones y jQuery las procesa en un orden diferente? Todos sus datos se procesan con manguera y deben volver a procesarse para reorganizarlos.
Todo el concepto de NO proporcionar una estrecha relación clave-valor es ludacris y terminará metiéndote en problemas más temprano que tarde. Para aquellos de ustedes que estén considerando esto, por favor no lo hagan. Las otras sugerencias para cambios de esquema están bien. Utilice una tabla secundaria, más campos en la tabla principal, una tabla de preguntas y respuestas, etc. Simplemente no almacene datos no etiquetados cuando la estructura de esos datos esté sujeta a cambios.
fuente
$.extend($.expr[':'], { unchecked: function (obj) { return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); } }); $("input:checked") $("input:unchecked")
fuente