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).lengthse 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 == undefinede 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[]']")?