Поки ваш селектор насправді працює, я не бачу нічого поганого у вашому коді, який перевіряє довжину масиву. Це має робити те, що ти хочеш. Існує маса способів очищення коду, щоб він був простішим і читабельнішим. Ось очищена версія з примітками про те, що я прибирав.
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()
циклу завжди буде щось.
- Неефективно використовувати $ (це) кілька разів в одній і тій же функції. Набагато краще перетворити його в локальну змінну, а потім використовувати її з цієї локальної змінної.
- Рекомендується ініціалізувати масиви з,
[]
а не new Array()
.
if (value)
коли очікується, що значення буде рядком, буде захищено від value == null
, value == undefined
і value == ""
тому вам не доведеться цього робити if (value && (value != ""))
. Можна просто зробити: if (value)
перевірити наявність усіх трьох порожніх умов.
if (album_text.length === 0)
підкаже, чи масив порожній до тих пір, поки це дійсний ініціалізований масив (який він знаходиться тут).
Що ви намагаєтеся зробити з цим селектором $("input[name='album_text[]']")
?