เมื่อสองวันที่ผ่านมา ผมเห็นเพื่อนๆ ถามว่าจะใช้สคริปต์ควบคุมต่างๆ ใน HTML ยังไง และตอนนี้ผมจะสรุปเอาเองครับ เนื่องจากเหตุผลของโครงการ หลายโปรแกรมจึงถูกเขียนด้วย VBScript เพื่อนๆ ที่สนใจสามารถเขียนใหม่ลงใน JavaScript ได้
ตกลง เข้าสู่หัวข้อและมาแนะนำตอนนี้กันดีกว่า:
วันนี้เราจะแนะนำการใช้ VBScript เพื่อกำหนดจำนวนกล่องกาเครื่องหมายที่เลือกและค่าของกล่องกาเครื่องหมายที่เลือก
เมื่อสร้างรายการ เช่น รายการคำสั่งซื้อ กล่องกาเครื่องหมายอาจถูกวางไว้ด้านหน้าบันทึกคำสั่งซื้อแต่ละรายการเพื่อจัดเตรียมฟังก์ชันต่างๆ เช่น การลบและการออกแบทช์ โดยทั่วไป ค่าของแต่ละกล่องกาเครื่องหมายคือค่าของคีย์หลักของเรกคอร์ดที่เกี่ยวข้อง เช่น หมายเลขคำสั่งซื้อ เมื่อดำเนินการฟังก์ชันต่างๆ เช่น การลบและปล่อย คุณต้องทราบว่ามีการเลือกกล่องกาเครื่องหมายจำนวนเท่าใด และกล่องกาเครื่องหมายเหล่านี้สอดคล้องกับค่าใด โดยอธิบายวิธีการไว้ด้านล่าง
โปรแกรมแบ่งออกเป็นสามส่วน:
1. กำหนดว่า CheckBox ที่เลือกเป็นหนึ่งหรือมากกว่าหนึ่ง
แนวคิดหลักคือ: เมื่อมีกล่องกาเครื่องหมายหลายกล่องที่มีชื่อเดียวกันแต่ ID ต่างกัน ตัวอย่างเช่น ตัวควบคุมกล่องกาเครื่องหมายจะถูกตั้งชื่อ chkTest จากนั้นจะถูกเรียกในรูปแบบของอาร์เรย์ ตัวอย่างเช่น มีกล่องกาเครื่องหมายสามกล่องชื่อ chkTest และ ID ของพวกเขาคือ chkTest1, chkTest2 และ chkTest3 คุณต้องเขียน: chkTest(0).checked , chkTest(1).checked, chkTest(2).checked (อาร์เรย์เริ่มต้นจากศูนย์) เมื่อมีกล่องกาเครื่องหมายเดียวเท่านั้น chkTest.checked สามารถใช้ได้โดยตรง สิ่งนี้กำหนดว่าสำหรับตัวเลขที่แตกต่างกัน (ตั้งแต่หนึ่งตัวขึ้นไป) วิธีการที่แตกต่างกันสามารถใช้เพื่อรับข้อมูลกล่องกาเครื่องหมายเท่านั้น เนื่องจากเมื่อมีตัวควบคุมหลายตัวที่มีชื่อเดียวกันและ ID ต่างกัน ตัวควบคุมนั้นจะมีคุณสมบัติ "control name.type" และคุณสมบัติแบบอ่านอย่างเดียวนี้สามารถเท่ากับสตริงใดๆ กล่าวคือ control name.type = " สตริงใดๆ" ค่าคงที่เป็นจริง แน่นอนว่า นี่เป็นเฉพาะเมื่อมีแอตทริบิวต์ชื่อตัวควบคุม name.type เท่านั้น ไม่เช่นนั้นจะเป็นเท็จเสมอ เพื่อให้สามารถแยกแยะได้ว่ากล่องกาเครื่องหมายในรายการเป็นแบบเดียวหรือหลายรายการ ขั้นตอนมีดังนี้:
'********************************************* ***** ***
'<ชื่อฟังก์ชัน>
' gfIs_ArrayTest(obj)
'<ฟังก์ชัน>
' ตรวจสอบว่าช่องทำเครื่องหมายที่เลือกเป็นหนึ่งหรือมากกว่าหนึ่งช่อง
'<พารามิเตอร์>
' ชื่อวัตถุกล่องกาเครื่องหมาย
'<มูลค่าที่ส่งคืน>
' จริง
' เท็จ
'<หมายเหตุ>
' สร้างเมื่อ มีนาคม 15th.2004 โดย AITD
-
ฟังก์ชั่น gfIs_ArrayTest (obj)
เมื่อเกิดข้อผิดพลาดดำเนินการต่อต่อไป
ถ้า obj.type = "flag" แล้ว
gfIs_ArrayTest = จริง
อื่น
gfIs_ArrayTest = เท็จ
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
2. ตรวจสอบว่าการเลือกกล่องกาเครื่องหมายบนหน้าจอตรงตามข้อกำหนด
หรือไม่ ตัวอย่างเช่น เมื่อลบ ให้เลือกอย่างน้อยหนึ่งระเบียน เมื่อแก้ไข เลือกและเลือกเพียงหนึ่งระเบียนเท่านั้น อื่นๆ สิ่งที่สามารถเลือกได้เพียง 5 รายการ สามารถเลือกได้เพียง 10 รายการ เป็นต้น เพียงเปลี่ยนขั้นตอนต่อไปนี้เป็นดังนี้ อย่าลืมสิ่งที่ฉันเพิ่งพูดไป มีหลายวิธีในการจัดการกับช่องทำเครื่องหมายเดียวและหลายช่อง
'************************************************ * ****
'<ชื่อฟังก์ชัน>
' gfChkช่องทำเครื่องหมาย()
'<ฟังก์ชัน>
' ตรวจสอบว่าการเลือกช่องทำเครื่องหมายหน้าจอตรงตามข้อกำหนดหรือไม่
'<พารามิเตอร์>
' obj: การควบคุมช่องทำเครื่องหมายที่สอดคล้องกัน
'ธง: ตรวจสอบกฎ: 0 สามารถเลือกได้หลายรายการ
' 1 สามารถเลือกได้เพียงอันเดียวเท่านั้น
' ชื่อ: แจ้งให้ผู้ใช้ทราบข้อมูลเกี่ยวกับการควบคุมที่รายงานข้อผิดพลาด
'<มูลค่าที่ส่งคืน>
' จริง
' เท็จ
'<หมายเหตุ>
' สร้างเมื่อ มีนาคม 15th.2004 โดย AITD
'************************************************ * ****
ฟังก์ชั่น gfChkCheckbox (obj, flag, name)
ดิม ไอ
เจ
gfChkCheckbox = เท็จ
ฉัน = 0
เจ = 0
'หากไม่มีวัตถุนั้น
ถ้าเป็นโมฆะ(obj) แล้ว
msgbox "โปรดเลือก " + ชื่อ + "" 'โปรดเลือกวัตถุ'
gfChkCheckbox = เท็จ
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
'มีเพียงวัตถุเดียวเท่านั้น
ถ้าไม่ใช่ gfIs_ArrayTest(obj) แล้ว
ถ้า obj.checked = false แล้ว
msgbox "โปรดเลือก " + ชื่อ + "" 'โปรดเลือกวัตถุ'
gfChkCheckbox = เท็จ
ฟังก์ชั่นทางออก
อื่น
gfChkCheckbox = จริง
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
สิ้นสุดถ้า
'หากมีวัตถุหลายรายการ
สำหรับ i = 0 ถึง (obj.length - 1)
ถ้า obj(i).type = "ช่องทำเครื่องหมาย" แล้ว
ถ้า obj(i).checked = true แล้ว
เจ=เจ+1
สิ้นสุดถ้า
สิ้นสุดถ้า
ต่อไป
ถ้า j = 0 แล้ว
msgbox "กรุณาเลือก" + ชื่อ + "" 'กรุณาเลือกวัตถุ'
gfChkCheckbox = เท็จ
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
ถ้า j = 1 แล้ว
gfChkCheckbox = จริง
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
ถ้า j > 1 แล้ว
ถ้าแฟล็ก = 1 แล้ว
msgbox "สามารถเลือกได้เพียง " + ชื่อ + " เท่านั้น" 'สามารถเลือกได้เพียงวัตถุเดียวเท่านั้น'
gfChkCheckbox = เท็จ
ฟังก์ชั่นทางออก
อื่น
gfChkCheckbox = จริง
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
end if
end function
3. รับ
ค่า
ของช่องทำเครื่องหมาย เพื่อความสะดวกในการประมวลผลในภายหลัง ข้อมูลสำคัญมักจะถูกบันทึกไว้ในแอตทริบิวต์ value ของช่องทำเครื่องหมายเพื่อการเข้าถึงในภายหลังโปรแกรมต่อไปนี้สตริงค่าของกล่องกาเครื่องหมายที่เลือกลงในสตริงโดยใช้ตัวคั่น "^|^" และส่งกลับค่านั้น
-
'<ชื่อฟังก์ชัน>
'gfGetCheckBoxValue(obj)
'<ฟังก์ชัน>
'รับค่าของช่องทำเครื่องหมายที่เลือก
'<พารามิเตอร์>
' ชื่อวัตถุกล่องกาเครื่องหมาย
'<มูลค่าที่ส่งคืน>
'ค่าของช่องทำเครื่องหมายที่เลือก
'<หมายเหตุ>
' สร้างเมื่อ มีนาคม 15th.2004 โดย AITD
-
ฟังก์ชั่น gfGetCheckBoxValue (obj)
หรี่ strValue
intCounter สลัว
สลัวฉัน
strValue = ""
intCounter = 0
'หากไม่มีวัตถุอยู่
ถ้าเป็นโมฆะ(obj) แล้ว
gfGetCheckBoxValue = strValue
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
'ถ้าวัตถุเป็น
ถ้าไม่ใช่ gfIs_ArrayTest(obj) แล้ว
ถ้า obj.checked = false แล้ว
gfGetCheckBoxValue = strValue
ฟังก์ชั่นทางออก
อื่น
gfGetCheckBoxValue = obj.value
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
สิ้นสุดถ้า
'ถ้าวัตถุมีหลายรายการ
สำหรับ i = 0 ถึง obj.length - 1
ถ้า obj(i).checked = true แล้ว
ถ้า intCounter > 0 แล้ว
strValue = strValue & "^|^" & CStr(obj(i).value)
อื่น
strValue = CStr(obj(i).value)
สิ้นสุดถ้า
intCounter = intCounter + 1
สิ้นสุดถ้า
ถัดไป
= strValue
ฟังก์ชั่นสิ้นสุด
เป็นวิธีการประมวลผลกล่องกาเครื่องหมายใน VBScript (ใช้เป็นครั้งคราว) ฟังก์ชั่นเหล่านี้สามารถสรุปเป็นไฟล์ vbs ทั่วไปและอ้างอิงในพื้นที่แท็ก <head> ของ html เพื่อให้เป็นสากล ~ เช่น <head><script language=vbscript src=vbsChkBoxTool.vbs></script> </script head>
นอกจากนี้ โปรดทราบว่าในแอปพลิเคชันจริง อาจไม่มีระเบียนเดียวในรายการที่สร้างขึ้นตามเงื่อนไขการสืบค้น กล่าวคือ ไม่มีตัวควบคุมกล่องกาเครื่องหมาย หากยังคงเรียกตัวควบคุมที่มีชื่อดังกล่าว IE จะมีการรายงานข้อผิดพลาด ไม่มีวิธีแก้ปัญหาที่ดี ดังนั้นฉันจึงเขียนโปรแกรมเพื่อหลีกเลี่ยงสถานการณ์นี้โดยไม่มีการควบคุมช่องทำเครื่องหมาย:
function sIsChkBoxExist()
เมื่อเกิดข้อผิดพลาดดำเนินการต่อต่อไป
ผิดพลาดชัดเจน
ถ้า isEmpty(document.frmOrderList.chkOrder) แล้ว
สิ้นสุดถ้า
ถ้า err.number <> 0 แล้ว
อื่น
sIsChkBoxExist=จริง
สิ้นสุดถ้า
ผิดพลาดชัดเจน
ฟังก์ชันสิ้นสุด
ให้ดำเนินการใดๆ กับการควบคุมที่กำหนดไว้ล่วงหน้า เช่น isEmpty หากบันทึก err.number>0 แสดงว่าไม่มีการควบคุมอยู่ อย่างไรก็ตาม เนื่องจากมีข้อผิดพลาดในการดำเนินการต่อ จะไม่มีข้อผิดพลาดเกิดขึ้น ได้รับแจ้ง นอกจากนี้ยังเป็นตัวกำหนดว่ามีการควบคุมอยู่หรือไม่
แต่ละครั้งก่อนที่จะเรียกใช้ฟังก์ชันทั้งสามข้างต้น ให้เรียกใช้ฟังก์ชัน sIsChkBoxExist หนึ่งครั้งเพื่อดูว่ามีตัวควบคุมที่เกี่ยวข้องอยู่หรือไม่ เพื่อให้ไม่มีข้อผิดพลาด