Pertama, mari kita lihat contoh:
Salinan kode adalah sebagai berikut:
<Form Name = "BuyerForm" Metode = "POST" ACTION = "/MySport/Control/User/List.do">
<input type = "centang kotak" id = "nama pengguna" value = "testtest"> testtest <br>
<input type = "centang kotak" nama = "nama pengguna" value = "testtest"> testtest <br>
<input type = "text" id = "usernames" value = "testtest"> testtest <br>
</form>
Document.Forms [0] Ketika ada formulir atau beberapa formulir formulir di halaman HTML, ia mengembalikan bentuk array dari tipe nodelist.
Document.Forms [0] .Usernames, di sini nama pengguna dapat berupa nilai ID atau nama, di mana kedua atribut ini setara. Selain itu, tidak membedakan apakah komponen adalah kotak teks, kotak radio, atau kotak centang.
Saat ini, kita perlu membedakan antara dua situasi .
Ketika ID atau nama input adalah 'nama pengguna', Document.Forms [0] .UserNames mengembalikan komponen input tertentu. Jika dioperasikan, harus digunakan sesuai dengan metode operasi komponen tertentu.
Pada saat ini, peringatan (Document.Forms [0] .UserNames.Length) mengembalikan tidak terdefinisi karena komponen input tidak memiliki properti panjang.
Ketika ada dua atau lebih ID input atau nama 'Nama Pengguna', Document.Forms [0] .Usernames mengembalikan array nodelist. Saat ini,
Peringatan (Document.Forms [0] .Usernames.length) akan mengembalikan panjang array. Dalam contoh di atas, nilai pengembalian adalah 3.
Oleh karena itu, saat menggunakan JS untuk memilih semua, pertimbangkan situasi di mana ada satu dan beberapa kotak centang dengan nama yang sama.
Salinan kode adalah sebagai berikut:
function allselect () {
var form = document.forms [0];
var state = form.allselectbox.Checked;
var length = form.usernames.length; // Ketika ada dua atau lebih nama kotak centang yang merupakan nama pengguna, panjang array dikembalikan
// Ketika ada nama kotak centang yang merupakan nama pengguna, form.usernames mengembalikan objek kotak centang, bukan array, jadi properti panjangnya tidak ditentukan
if (length) {// Dalam JavaScript, selama kondisi yang dinilai adalah 0, nol, atau tidak terdefinisi, itu dianggap salah, dan kasus lain dianggap benar
untuk (var i = 0; i <panjang; i ++) {
Form.usernames [i] .Checked = state;
}
}
kalau tidak{
Form.usernames.Checked = state;
}
}
Ada ID komponen 'Nama Pengguna' atau beberapa ID komponen adalah 'nama pengguna', Document.getElementById ('nama pengguna') mengembalikan nilai yang dikembalikan oleh komponen formulir. Ketika beberapa ID komponen adalah 'nama pengguna', ID komponen pertama adalah 'nama pengguna'.
Ada nama komponen 'nama pengguna' atau beberapa nama komponen 'nama pengguna', document.geteLementsbyname () mengembalikan array htmlcollection. Perhatikan perbedaan dari Document.GetElementsByTagname (), yang mendapatkan array sesuai dengan kategori tag.
var name = document.geteLementsbyTagname ("nama pengguna"), peringatan (nama [0]) hasil yang dikembalikan di sini tidak ditentukan. Saya biasa mencampur nama byn dengan bytagname, dan tidak ada tag dimulai dengan nama pengguna. <value nama pengguna = ''> </usernames> Ini tidak ada.
Namun, pengembalian GetElementsByTagname masih merupakan koleksi array, yang tidak berisi konten apa pun, nama [0] tidak ada, sehingga pengembalian tidak ditentukan, karena ketika kisaran array terlampaui, nilai yang tidak terdefinisi muncul.
var test = {'0', '1', '2',}; alert (test [3]); kembali tidak terdefinisi.