Пока ваш селектор действительно работает, я не вижу ничего плохого в вашем коде, который проверяет длину массива. Это должно делать то, что вы хотите. Есть много способов сделать ваш код более простым и читабельным. Вот очищенная версия с примечаниями о том, что я убрал.
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[]']")?