Siempre que su selector esté funcionando, no veo nada malo en su código que verifica la longitud de la matriz. Eso debería hacer lo que quieras. Hay muchas formas de limpiar su código para que sea más simple y legible. Aquí hay una versión limpia con notas sobre lo que limpié.
var album_text = [];
$("input[name='album_text[]']").each(function() {
var value = $(this).val();
if (value) {
album_text.push(value);
}
});
if (album_text.length === 0) {
$('#error_message').html("Error");
}
else {
//send data
}
Algunas notas sobre lo que estabas haciendo y lo que cambié.
$(this)
es siempre un objeto jQuery válido, por lo que no hay razón para verificarlo if ($(this))
. Puede que no tenga ningún objeto DOM dentro, pero puede verificarlo $(this).length
si lo necesita, pero eso no es necesario aquí porque el .each()
ciclo no se ejecutaría si no hubiera elementos, por lo que $(this)
dentro de su .each()
ciclo siempre habrá algo.
- Es ineficiente usar $ (this) varias veces en la misma función. Es mucho mejor ponerlo una vez en una variable local y luego usarlo desde esa variable local.
- Se recomienda inicializar las matrices con en
[]
lugar de new Array()
.
if (value)
cuando se espera que el valor sea una cadena, ambos protegerán y value == null
, por lo tanto, no tendrá que hacerlo . Simplemente puede hacer: para verificar las tres condiciones vacías.value == undefined
value == ""
if (value && (value != ""))
if (value)
if (album_text.length === 0)
le dirá si la matriz está vacía siempre que sea una matriz inicializada válida (que está aquí).
¿Qué intentas hacer con este selector $("input[name='album_text[]']")
?