Gostaria de saber como verificar se um array está vazio ou nulo no jQuery. Eu tentei, array.length === 0
mas não funcionou. Também não gerou nenhum erro.
Este é o 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[]']")
está realmente retornando elementos?Respostas:
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.
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 verificarif ($(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.[]
vez denew Array()
.if (value)
quando o valor é esperado para ser uma string protegerá devalue == null
,value == undefined
evalue == ""
então você não precisa fazerif (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[]']")
?fonte
===
), a menos que queira especificamente permitir uma conversão de tipo. É um bom hábito para adquirir.O usuário JQuery é EmptyObject para verificar se a matriz contém elementos ou não.
fonte
isEmptyObject
sempre retornafalse
seArray.prototype
for estendido, por exemploArray.prototype.someFunction = function () {};
- mesmo se a matriz estiver vazia. Observe que alguns frameworks (por exemplo, Ember.js) estendem o protótipo Array por padrão.isEmptyObject
! Para jQuery 1.8.3jQuery.isEmptyObject([])
retornafalse
, mas para jQuery 1.11.3 ele retornatrue
. Na verdade, a documentação do jQuery diz que O argumento deve sempre ser um Objeto JavaScript simples, pois outros tipos de objeto (elementos DOM, strings / números primitivos, objetos de host) podem não fornecer resultados consistentes em navegadores. Desculpe, não vi a resposta de @rhinoxi.Você deve verificar se há
''
(string vazia) antes de inserir o array. Seu array possui elementos que são strings vazias. Então vocêalbum_text.length === 0
vai funcionar muito bem.fonte
if( $(this).val() && $(this).val() != '')
mas ele não funciona.Eu acho que é perigoso usar $ .isEmptyObject do jquery para verificar se o array está vazio, como @jesenko mencionou. Acabei de encontrar esse problema.
No documento isEmptyObject , ele menciona:
pelo qual você pode determinar
$.isPlainObject
. O retorno de$.isPlainObject([])
é falso.fonte