Me gustaría saber cómo verificar si una matriz está vacía o nula en jQuery. Lo intenté array.length === 0
pero no funcionó. Tampoco arrojó ningún error.
Este es el código:
var album_text = new Array();
$("input[name='album_text[]']").each(function(){
if( $(this).val() && $(this).val() != '') {
album_text.push($(this).val());
}
});
if (album_text.length === 0) {
$('#error_message').html("Error");
}
else {
// send data
}
$("input[name='album_text[]']")
realidad están devolviendo elementos?Respuestas:
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é.
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 verificarloif ($(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.[]
lugar denew Array()
.if (value)
cuando se espera que el valor sea una cadena, ambos protegerán yvalue == 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[]']")
?fuente
===
) a menos que específicamente quiera permitir una conversión de tipo. Es un buen hábito para adquirir.El usuario JQuery es EmptyObject para verificar si la matriz contiene elementos o no.
fuente
isEmptyObject
siempre devuelvefalse
siArray.prototype
está extendido, por ejemploArray.prototype.someFunction = function () {};
, incluso si la matriz está vacía. Tenga en cuenta que algunos marcos (por ejemplo, Ember.js) amplían el prototipo de Array de forma predeterminada.isEmptyObject
! Para jQuery 1.8.3jQuery.isEmptyObject([])
devuelvefalse
, pero para jQuery 1.11.3 devuelvetrue
. En realidad, la documentación de jQuery dice que el argumento siempre debe ser un objeto JavaScript simple, ya que otros tipos de objetos (elementos DOM, cadenas / números primitivos, objetos host) pueden no dar resultados consistentes en todos los navegadores. Lo siento, no vi la respuesta de @rhinoxi.Debe verificar
''
(cadena vacía) antes de ingresar a su matriz. Su matriz tiene elementos que son cadenas vacías. Entoncesalbum_text.length === 0
funcionará bien.fuente
if( $(this).val() && $(this).val() != '')
pero no funciona.Creo que es peligroso usar $ .isEmptyObject de jquery para verificar si la matriz está vacía, como mencionó @jesenko. Acabo de encontrarme con ese problema.
En el documento isEmptyObject , menciona:
que puede determinar por
$.isPlainObject
. El regreso de$.isPlainObject([])
es falso.fuente