jquery - seleccionar - Pasar por las casillas de verificación y contar cada una marcada o desmarcada
uncheck checkbox jquery (6)
Me he encontrado con un problema. Aquí hay 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 conocer cuáles están marcados y cuáles no están marcados.
Usando esto, puedo construir una cadena que luego ingreso en un campo de base de datos. Aquí hay un ejemplo.
(Check1 - marcado)
(Check2 - no marcado)
(Check3 - verificado)
1,0,1
Hasta ahora, tengo este 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 para jquery.
Usando Selectores
Puede obtener todas las casillas marcadas como esta:
var boxes = $(":checkbox:checked");
Y todo no marcado así:
var nboxes = $(":checkbox:not(:checked)");
Simplemente puede desplazarse por cualquiera de estas colecciones y almacenar esos nombres. Si hay algo ausente, sabes que fue o no verificado. En PHP, si tenía una matriz de nombres que fueron in_array()
simplemente podría hacer una solicitud in_array()
para saber si una casilla en particular debería o no in_array()
en una fecha posterior.
Publicar por fascículos
jQuery también tiene un método de serialización que mantendrá el estado de tus 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á mantener la información para la cual se verificaron elementos también.
No creo que se haya prestado suficiente atención a las consideraciones de esquema planteadas en la publicación original. Por lo tanto, aquí hay algo que considerar para los novatos.
Digamos que siguió adelante y creó esta solución. Todos sus valores serviles se concentran 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 de codificación.
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, cualquiera que sea, espera que esto sea un cambio simple.
Entonces agrega la casilla de verificación a la IU (la parte fácil). Su código de bucle ya concatenará los valores sin importar cuántas casillas de verificación haya. También imagina que su campo de base de datos es simplemente un varchar u otro tipo de cadena, por lo que debería estar bien también.
¿Qué sucede cuando los clientes o usted intentan ver los datos antes del cambio? Básicamente estás serializando de izquierda a derecha. Sin embargo, ahora los valores después de 3 están todos desactivados por 1 carácter. ¿Qué vas a hacer con todos tus datos existentes? ¿Va a escribir una aplicación, sacar todo de la base de datos, procesarla para agregar un valor predeterminado para la nueva posición de la pregunta y luego almacenarla nuevamente en la base de datos? ¿Qué sucede cuando tienes varios valores nuevos por semana o por mes? ¿Qué sucede si mueve las ubicaciones y jQuery las procesa en un orden diferente? Todos sus datos tienen una manguera y deben reprocesarse nuevamente para reorganizarlo.
El concepto completo de NO proporcionar una relación clave-valor estrecha es ludacris y terminará metiéndote en problemas más pronto 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. Use 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.
No sé sobre js ... pero se puede hacer en php de esta manera ...
Espero que este enlace pueda ayudar ...
Para construir 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 volver a considerar la estructura en la que va a almacenar esto en su base de datos.
EDITAR : Perdón, leí mal el formato de salida que estabas 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);
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,
o 0,
a una cadena.
$.extend($.expr['':''], {
unchecked: function (obj) {
return ((obj.type == ''checkbox'' || obj.type == ''radio'') && !$(obj).is('':checked''));
}
});
$("input:checked")
$("input:unchecked")