Selama pemilih Anda benar-benar berfungsi, saya tidak melihat ada yang salah dengan kode Anda yang memeriksa panjang array. Itu harus melakukan apa yang Anda inginkan. Ada banyak cara untuk membersihkan kode Anda agar lebih sederhana dan lebih mudah dibaca. Ini versi yang dibersihkan dengan catatan tentang apa yang saya bersihkan.
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
}
Beberapa catatan tentang apa yang Anda lakukan dan apa yang saya ubah.
$(this)
selalu merupakan objek jQuery yang valid sehingga tidak ada alasan untuk memeriksanya if ($(this))
. Ini mungkin tidak memiliki objek DOM di dalamnya, tetapi Anda dapat memeriksanya $(this).length
jika perlu, tetapi itu tidak perlu di sini karena .each()
loop tidak akan berjalan jika tidak ada item sehingga $(this)
di dalam .each()
loop Anda akan selalu menjadi sesuatu.
- Tidak efisien menggunakan $ (this) berkali-kali dalam fungsi yang sama. Jauh lebih baik untuk memasukkannya sekali ke dalam variabel lokal dan kemudian menggunakannya dari variabel lokal itu.
- Direkomendasikan untuk menginisialisasi array dengan
[]
daripada new Array()
.
if (value)
ketika nilai diharapkan menjadi string akan baik melindungi dari value == null
, value == undefined
dan value == ""
sehingga Anda tidak perlu melakukan if (value && (value != ""))
. Anda tinggal melakukan: if (value)
untuk memeriksa ketiga kondisi kosong.
if (album_text.length === 0)
akan memberi tahu Anda jika array kosong selama itu adalah array yang valid dan diinisialisasi (yang ada di sini).
Apa yang Anda coba lakukan dengan pemilih ini $("input[name='album_text[]']")
?