Пока ваш селектор действительно работает, я не вижу ничего плохого в вашем коде, который проверяет длину массива. Это должно делать то, что вы хотите. Есть много способов сделать ваш код более простым и читабельным. Вот очищенная версия с примечаниями о том, что я убрал.
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
}
Несколько заметок о том, что вы делали и что я изменил.
$(this)
всегда является допустимым объектом jQuery, поэтому нет причин когда-либо проверять if ($(this))
. В нем может не быть никаких объектов DOM, но вы можете проверить это, $(this).length
если вам нужно, но здесь это не обязательно, потому что .each()
цикл не запускался бы, если бы не было элементов, поэтому $(this)
внутри вашего .each()
цикла всегда будет что-то.
- Неэффективно использовать $ (this) несколько раз в одной функции. Гораздо лучше получить его один раз в локальную переменную, а затем использовать из этой локальной переменной.
- Рекомендуется инициализировать массивы с помощью,
[]
а не new Array()
.
if (value)
когда ожидается, что значение будет строкой, оба будут защищать от value == null
, value == undefined
и value == ""
поэтому вам не нужно этого делать if (value && (value != ""))
. Вы можете просто сделать: if (value)
проверить все три пустых условия.
if (album_text.length === 0)
сообщит вам, пуст ли массив, если это действительный инициализированный массив (который находится здесь).
Что вы пытаетесь сделать с этим селектором $("input[name='album_text[]']")
?