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