Saya ingin tahu bagaimana memeriksa apakah sebuah array kosong atau null di jQuery. Saya mencoba array.length === 0
tetapi tidak berhasil. Itu juga tidak menimbulkan kesalahan.
Ini kodenya:
var album_text = new Array();
$("input[name='album_text[]']").each(function(){
if( $(this).val() && $(this).val() != '') {
album_text.push($(this).val());
}
});
if (album_text.length === 0) {
$('#error_message').html("Error");
}
else {
// send data
}
$("input[name='album_text[]']")
benar-benar mengembalikan elemen?Jawaban:
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.
Beberapa catatan tentang apa yang Anda lakukan dan apa yang saya ubah.
$(this)
selalu merupakan objek jQuery yang valid sehingga tidak ada alasan untuk memeriksanyaif ($(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.[]
daripadanew Array()
.if (value)
ketika nilai diharapkan menjadi string akan baik melindungi darivalue == null
,value == undefined
danvalue == ""
sehingga Anda tidak perlu melakukanif (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[]']")
?sumber
===
) kecuali saya secara khusus ingin mengizinkan konversi jenis. Ini adalah kebiasaan yang baik untuk dilakukan.Pengguna JQuery adalah EmptyObject untuk memeriksa apakah array berisi elemen atau tidak.
sumber
isEmptyObject
selalu mengembalikanfalse
jikaArray.prototype
diperpanjang, misalnyaArray.prototype.someFunction = function () {};
- bahkan jika array kosong. Perhatikan bahwa beberapa kerangka kerja (misalnya Ember.js) memperluas prototipe Array secara default.isEmptyObject
! Untuk jQuery 1.8.3jQuery.isEmptyObject([])
mengembalikanfalse
, tetapi untuk jQuery 1.11.3 mengembalikantrue
. Sebenarnya, dokumentasi jQuery mengatakan Argumen harus selalu berupa Objek JavaScript biasa karena jenis objek lain (elemen DOM, string / angka primitif, objek host) mungkin tidak memberikan hasil yang konsisten di seluruh browser. Maaf, tidak melihat jawaban @rhinoxi.Anda harus memeriksa
''
(string kosong) sebelum mendorong ke dalam array Anda. Array Anda memiliki elemen yang berupa string kosong. Maka keinginanmualbum_text.length === 0
akan bekerja dengan baik.sumber
if( $(this).val() && $(this).val() != '')
namun tidak berhasil.Saya pikir berbahaya menggunakan $ .isEmptyObject dari jquery untuk memeriksa apakah array kosong, seperti yang disebutkan @jesenko. Saya baru saja bertemu masalah itu.
Dalam dokumen isEmptyObject , itu menyebutkan:
yang dapat Anda tentukan
$.isPlainObject
. Kembalinya$.isPlainObject([])
salah.sumber