ช่องทำเครื่องหมายมักจะแสดงข้อมูลไบนารีที่เก็บอยู่ในฐานข้อมูลเป็นค่าใช่ / ไม่ใช่, Y / N หรือ 1/0 ช่องทำเครื่องหมาย HTML มีลักษณะไม่ดีในการส่งค่าไปยังเซิร์ฟเวอร์เฉพาะเมื่อทำเครื่องหมายที่ช่องทำเครื่องหมาย! นั่นหมายความว่าสคริปต์เซิร์ฟเวอร์ในเว็บไซต์อื่นต้องทราบล่วงหน้าว่ามีช่องทำเครื่องหมายที่เป็นไปได้ทั้งหมดในหน้าเว็บเพื่อให้สามารถจัดเก็บค่าบวก (ตรวจสอบ) หรือลบ (ไม่ถูกตรวจสอบ) ได้ ที่จริงแล้วค่าลบเป็นปัญหา (เมื่อผู้ใช้ยกเลิกการเลือกก่อนหน้านี้ (ก่อน) ตรวจสอบค่า - เซิร์ฟเวอร์จะรู้ได้อย่างไรเมื่อไม่มีสิ่งใดถูกส่งหากไม่ทราบล่วงหน้าว่าควรส่งชื่อนี้ไป) หากคุณมีสคริปต์ฝั่งเซิร์ฟเวอร์ซึ่งสร้างสคริปต์ UPDATE แบบไดนามิกจะมีปัญหาเพราะคุณไม่ทราบว่าควรได้รับช่องทำเครื่องหมายใดบ้างเพื่อตั้งค่า Y สำหรับการตรวจสอบและค่า N สำหรับการไม่เลือก (ไม่ได้รับ)
เนื่องจากฉันเก็บค่า 'Y' และ 'N' ในฐานข้อมูลของฉันและแสดงผ่านช่องทำเครื่องหมายที่ถูกตรวจสอบและไม่ถูกตรวจสอบในหน้าฉันเพิ่มเขตข้อมูลที่ซ่อนไว้สำหรับแต่ละค่า (ช่องทำเครื่องหมาย) ด้วยค่า 'Y' และ 'N' จากนั้นใช้ช่องทำเครื่องหมาย การเป็นตัวแทนและใช้การตรวจสอบฟังก์ชัน JavaScript อย่างง่าย () เพื่อกำหนดค่าถ้าเป็นไปตามการเลือก
<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>
ใช้หนึ่งฟัง JavaScript onclick และฟังก์ชั่นการตรวจสอบการโทร () สำหรับแต่ละช่องทำเครื่องหมายบนหน้าเว็บของฉัน:
function check(me)
{
if(me.checked)
{
me.previousSibling.previousSibling.value='Y';
}
else
{
me.previousSibling.previousSibling.value='N';
}
}
วิธีนี้ค่า 'Y' หรือ 'N' จะถูกส่งไปยังสคริปต์ฝั่งเซิร์ฟเวอร์เสมอรู้ว่าฟิลด์ใดที่ควรได้รับการอัปเดตและไม่จำเป็นต้องแปลง checbox "เป็น" ค่า "เป็น" Y "หรือไม่ได้รับช่องทำเครื่องหมายเป็น 'N '
หมายเหตุ: white space หรือ new line เป็นพี่น้องด้วยดังนั้นที่นี่ฉันต้องการ. prepreSibling.previousSibling.value หากไม่มีช่องว่างระหว่างนั้นเท่านั้นชัดเจนก่อนหน้านี้ค่า
คุณไม่จำเป็นต้องเพิ่มผู้ฟังอย่างชัดเจนเช่นก่อนหน้านี้คุณสามารถใช้ไลบรารี jQuery เพื่อเพิ่มฟังคลิกที่มีฟังก์ชั่นแบบไดนามิกเพื่อเปลี่ยนค่าไปยังช่องทำเครื่องหมายทั้งหมดในหน้าของคุณ:
$('input[type=checkbox]').click(function()
{
if(this.checked)
{
$(this).prev().val('Y');
}
else
{
$(this).prev().val('N');
}
});