Я хотел бы знать, как проверить, является ли массив пустым или нулевым в jQuery. Я пробовал, array.length === 0
но ничего не вышло. Это тоже не вызывало ошибок.
Это код:
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[]']")
на самом деле возвращаются элементы?Ответы:
Пока ваш селектор действительно работает, я не вижу ничего плохого в вашем коде, который проверяет длину массива. Это должно делать то, что вы хотите. Есть много способов сделать ваш код более простым и читабельным. Вот очищенная версия с примечаниями о том, что я убрал.
Несколько заметок о том, что вы делали и что я изменил.
$(this)
всегда является допустимым объектом jQuery, поэтому нет причин когда-либо проверятьif ($(this))
. В нем может не быть никаких объектов DOM, но вы можете проверить это,$(this).length
если вам нужно, но здесь это не обязательно, потому что.each()
цикл не запускался бы, если бы не было элементов, поэтому$(this)
внутри вашего.each()
цикла всегда будет что-то.[]
а неnew Array()
.if (value)
когда ожидается, что значение будет строкой, оба будут защищать отvalue == null
,value == undefined
иvalue == ""
поэтому вам не нужно этого делатьif (value && (value != ""))
. Вы можете просто сделать:if (value)
проверить все три пустых условия.if (album_text.length === 0)
сообщит вам, пуст ли массив, если это действительный инициализированный массив (который находится здесь).Что вы пытаетесь сделать с этим селектором
$("input[name='album_text[]']")
?источник
===
), если я специально не хочу разрешить преобразование типа. Это хорошая привычка.Пользовательский JQuery - EmptyObject, чтобы проверить, содержит ли массив элементы или нет.
источник
isEmptyObject
всегда возвращаетсяfalse
еслиArray.prototype
он расширен, напримерArray.prototype.someFunction = function () {};
- даже если массив пуст. Обратите внимание, что некоторые фреймворки (например, Ember.js) по умолчанию расширяют прототип Array.isEmptyObject
! Для jQuery 1.8.3jQuery.isEmptyObject([])
возвращаетсяfalse
, но для jQuery 1.11.3 он возвращаетсяtrue
. Собственно, документация jQuery говорит аргумент всегда должен быть простым объектом JavaScript, поскольку другие типы объектов (элементы DOM, примитивные строки / числа, объекты хоста) могут не давать согласованных результатов в браузерах. Извините, я не видел ответа @rhinoxi.Вы должны проверить
''
(пустую строку), прежде чем вставлять в массив. В вашем массиве есть элементы, которые являются пустыми строками. Тогда вашalbum_text.length === 0
будет работать нормально.источник
if( $(this).val() && $(this).val() != '')
но он не работает.Я думаю, что опасно использовать $ .isEmptyObject из jquery, чтобы проверить, пуст ли массив, как упоминал @jesenko. Я только что столкнулся с этой проблемой.
В документе isEmptyObject упоминается:
который можно определить по
$.isPlainObject
. Возврат$.isPlainObject([])
ложный.источник