Contanto que seu seletor esteja realmente funcionando, não vejo nada de errado com o seu código que verifica o comprimento da matriz. Isso deve fazer o que você quiser. Existem várias maneiras de limpar seu código para torná-lo mais simples e legível. Aqui está uma versão limpa com notas sobre o que eu limpei.
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
}
Algumas notas sobre o que você estava fazendo e o que mudei.
$(this)
é sempre um objeto jQuery válido, portanto, não há motivo para verificar if ($(this))
. Ele pode não ter nenhum objeto DOM dentro dele, mas você pode verificar $(this).length
se precisar, mas isso não é necessário aqui porque o .each()
loop não seria executado se não houvesse itens $(this)
dentro de seu.each()
loop sempre haverá algo.
- É ineficiente usar $ (this) várias vezes na mesma função. É muito melhor colocá-lo uma vez em uma variável local e usá-lo a partir dessa variável local.
- É recomendado inicializar arrays com em
[]
vez de new Array()
.
if (value)
quando o valor é esperado para ser uma string protegerá de value == null
, value == undefined
e value == ""
então você não precisa fazer if (value && (value != ""))
. Você pode apenas fazer: if (value)
para verificar todas as três condições vazias.
if (album_text.length === 0)
irá informá-lo se o array está vazio, desde que seja um array inicializado válido (que está aqui).
O que você está tentando fazer com este seletor $("input[name='album_text[]']")
?