ก่อนอื่นมาดูตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
<form name = "buyerform" method = "post" action = "/mysport/control/user/list.do">>
<อินพุต type = "ช่องทำเครื่องหมาย" id = "ชื่อผู้ใช้" value = "testtest"> testtest <br>
<อินพุต type = "ช่องทำเครื่องหมาย" name = "usernames" value = "testtest"> testtest <br>
<อินพุต type = "text" id = "ชื่อผู้ใช้" value = "testtest"> testtest <br>
</form>
document.forms [0] เมื่อมีแบบฟอร์มหรือแบบฟอร์มหลายรูปแบบในหน้า HTML จะส่งคืนอาร์เรย์แบบฟอร์มของประเภท nodelist
document.forms [0]. usernames, ชื่อผู้ใช้ที่นี่สามารถเป็นค่าของ ID หรือชื่อที่แอตทริบิวต์ทั้งสองนี้เทียบเท่า ยิ่งไปกว่านั้นมันไม่ได้แยกแยะว่าส่วนประกอบเป็นกล่องข้อความกล่องวิทยุหรือกล่องกาเครื่องหมาย
ในเวลานี้เราต้องแยกแยะระหว่างสองสถานการณ์
เมื่อ ID อินพุตหรือชื่อคือ 'ชื่อผู้ใช้', document.forms [0]. usernames ส่งคืนส่วนประกอบอินพุตเฉพาะ หากดำเนินการจะต้องใช้ตามวิธีการใช้งานส่วนประกอบเฉพาะ
ในเวลานี้แจ้งเตือน (document.forms [0] .usernames.length) ส่งคืนไม่ได้กำหนดเนื่องจากองค์ประกอบอินพุตไม่มีคุณสมบัติความยาว
เมื่อมีรหัสอินพุตสองรายการขึ้นไปหรือชื่อ 'ชื่อผู้ใช้', document.forms [0]. usernames ส่งคืนอาร์เรย์ nodelist ในเวลานี้
การแจ้งเตือน (document.forms [0] .usernames.length) จะส่งคืนความยาวของอาร์เรย์ ในตัวอย่างข้างต้นค่าส่งคืนคือ 3
ดังนั้นเมื่อใช้ JS เพื่อเลือกทั้งหมดให้พิจารณาสถานการณ์ที่มีกล่องกาเครื่องหมายหนึ่งกล่องและหลายช่องที่มีชื่อเดียวกัน
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น allselect () {
var form = document.forms [0];
var state = form.allselectbox ตรวจสอบ;
var length = form.usernames.length; // เมื่อมีชื่อช่องทำเครื่องหมายสองชื่อหรือมากกว่านั้นคือชื่อผู้ใช้ความยาวของอาร์เรย์จะถูกส่งคืน
// เมื่อมีชื่อช่องทำเครื่องหมายที่เป็นชื่อผู้ใช้รูปแบบ usernames จะส่งคืนวัตถุช่องทำเครื่องหมายไม่ใช่อาร์เรย์ดังนั้นคุณสมบัติความยาวของมันจึงไม่ได้กำหนดไว้
ถ้า (ความยาว) {// ใน JavaScript ตราบใดที่เงื่อนไขที่ตัดสินคือ 0, null หรือ undefined ก็ถือว่าเป็นเท็จและกรณีอื่น ๆ จะถูกพิจารณาว่าเป็นจริง
สำหรับ (var i = 0; i <length; i ++) {
form.usernames [i] .Checked = State;
-
-
อื่น{
Form.usernames.Checked = State;
-
-
มี ID ส่วนประกอบของ 'ชื่อผู้ใช้' หรือรหัสส่วนประกอบหลายรายการคือ 'ชื่อผู้ใช้', document.getElementById ('ชื่อผู้ใช้') ส่งคืนค่าที่ส่งคืนโดยองค์ประกอบฟอร์ม เมื่อรหัสส่วนประกอบหลายตัวเป็น 'ชื่อผู้ใช้' รหัสส่วนประกอบแรกคือ 'ชื่อผู้ใช้'
มีชื่อส่วนประกอบ 'ชื่อผู้ใช้' หรือชื่อส่วนประกอบหลายชื่อ 'ชื่อผู้ใช้', document.getElementsByName () ส่งคืนอาร์เรย์ htmlcollection หมายเหตุความแตกต่างจาก document.getElementsByTagname () ซึ่งได้รับอาร์เรย์ตามหมวดหมู่แท็ก
ชื่อ var = document.getElementByTagname ("ชื่อผู้ใช้"), การแจ้งเตือน (ชื่อ [0]) ผลลัพธ์ที่ส่งคืนที่นี่ไม่ได้กำหนด ฉันเคยผสมชื่อ byname กับ bytagname และไม่มีแท็กเริ่มต้นด้วยชื่อผู้ใช้ <usernames value = ''> </sernames> สิ่งนี้ไม่มีอยู่
อย่างไรก็ตามการกลับมาของ GetElementsByTagname ยังคงเป็นคอลเลกชันอาร์เรย์ซึ่งไม่มีเนื้อหาใด ๆ ชื่อ [0] ไม่มีอยู่ดังนั้นการส่งคืนจะไม่ได้กำหนดเพราะเมื่อช่วงอาร์เรย์เกินค่าที่ไม่ได้กำหนดจะปรากฏขึ้น
var test = {'0', '1', '2',}; แจ้งเตือน (ทดสอบ [3]); ส่งคืนที่ไม่ได้กำหนด