บางครั้งฉันต้องการสิ่งที่คล้ายกันมาก ... และฉันได้รับมัน
ดังนั้นสิ่งที่ฉันใส่ที่นี่คือวิธีที่ฉันทำเทคนิคเพื่อให้สามารถส่งฟอร์มโดย JavaScript โดยไม่ต้องมีการตรวจสอบและดำเนินการตรวจสอบความถูกต้องเฉพาะเมื่อผู้ใช้กดปุ่ม (โดยทั่วไปคือปุ่มส่ง)
ตัวอย่างเช่นฉันจะใช้รูปแบบที่น้อยที่สุดมีเพียงสองฟิลด์และปุ่มส่ง
จำสิ่งที่ต้องการ: จาก JavaScript จะต้องสามารถส่งได้โดยไม่ต้องตรวจสอบใด ๆ อย่างไรก็ตามหากผู้ใช้กดปุ่มดังกล่าวการตรวจสอบจะต้องทำและส่งแบบฟอร์มเฉพาะเมื่อผ่านการตรวจสอบ
โดยปกติทุกอย่างจะเริ่มจากบางสิ่งที่อยู่ใกล้สิ่งนี้ (ฉันลบสิ่งพิเศษทั้งหมดที่ไม่สำคัญ):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
ดูว่าฟอร์มแท็กไม่มีonsubmit="..."
(จำได้ว่ามันเป็นเงื่อนไขที่ไม่ได้มี)
ปัญหาคือว่าการส่งแบบฟอร์มเสมอไม่ว่าถ้าonclick
ผลตอบแทนหรือtrue
false
ถ้าฉันเปลี่ยนtype="submit"
สำหรับtype="button"
ดูเหมือนว่าจะทำงาน แต่ไม่ได้ มันไม่เคยส่งแบบฟอร์ม แต่สามารถทำได้ง่าย
ดังนั้นในที่สุดฉันก็ใช้สิ่งนี้:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
และในfunction Validator
กรณีที่return True;
ฉันยังเพิ่ม JavaScript ส่งประโยคสิ่งที่คล้ายกับนี้:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
id=""
เป็นเพียงสำหรับจาวาสคริปต์getElementById
ที่name=""
เป็นเพียงเพื่อให้ปรากฏในข้อมูล POST
ในวิธีดังกล่าวทำงานได้ตามที่ฉันต้องการ
ฉันใส่สิ่งนี้ไว้สำหรับคนที่ไม่ต้องการonsubmit
ฟังก์ชั่นในแบบฟอร์ม แต่ทำการตรวจสอบความถูกต้องบางอย่างเมื่อมีการกดปุ่มโดยผู้ใช้
ทำไมฉันไม่ต้องการส่งแบบฟอร์มแท็ก? ง่ายต่อส่วน JavaScript อื่น ๆ ฉันต้องทำการส่ง แต่ฉันไม่ต้องการให้มีการตรวจสอบใด ๆ
เหตุผล: หากผู้ใช้เป็นผู้ดำเนินการส่งฉันต้องการและต้องการการตรวจสอบที่จะทำ แต่ถ้ามันเป็น JavaScript บางครั้งฉันจำเป็นต้องดำเนินการส่งในขณะที่การตรวจสอบดังกล่าวจะหลีกเลี่ยงได้
อาจฟังดูแปลก แต่ไม่ใช่เมื่อคิดถึงตัวอย่าง: ในการเข้าสู่ระบบ ... โดยมีข้อ จำกัด บางอย่าง ... ไม่อนุญาตให้ใช้เซสชัน PHP และไม่อนุญาตให้ใช้คุกกี้!
ดังนั้นลิงก์ใด ๆ จะต้องถูกแปลงเป็นส่งแบบฟอร์มดังกล่าวดังนั้นข้อมูลการเข้าสู่ระบบจะไม่สูญหาย เมื่อยังไม่มีการลงชื่อเข้าใช้จะต้องใช้งาน ดังนั้นจึงไม่จำเป็นต้องมีการตรวจสอบความถูกต้องของลิงก์ แต่ฉันต้องการนำเสนอข้อความให้กับผู้ใช้หากผู้ใช้ไม่ได้ป้อนทั้งฟิลด์ผู้ใช้และรหัสผ่าน ดังนั้นหากขาดหายไปจะต้องไม่ส่งแบบฟอร์ม! มีปัญหา
ดูปัญหา: ไม่ต้องส่งแบบฟอร์มเมื่อช่องว่างหนึ่งช่องว่างหากผู้ใช้กดปุ่มหากเป็นรหัส JavaScript จะต้องสามารถส่งได้
หากฉันทำงานบนonsubmit
แท็กฟอร์มฉันจะต้องรู้ว่าเป็นผู้ใช้หรือ JavaScript อื่น ๆ เนื่องจากไม่มีพารามิเตอร์ที่สามารถส่งผ่านได้จึงไม่สามารถทำได้โดยตรงดังนั้นบางคนจึงเพิ่มตัวแปรเพื่อบอกว่าต้องทำการตรวจสอบความถูกต้องหรือไม่ สิ่งแรกในฟังก์ชั่นการตรวจสอบความถูกต้องคือการตรวจสอบค่าตัวแปร ฯลฯ ... ซับซ้อนเกินไปและรหัสไม่ได้บอกสิ่งที่ต้องการจริงๆ
ดังนั้นการแก้ปัญหาคือไม่ต้องส่งบนแท็กฟอร์ม Insead วางไว้ตรงจุดที่จำเป็นจริงๆ
สำหรับอีกด้านหนึ่งทำไมใส่ onsubmit code เนื่องจาก conceptually ฉันไม่ต้องการ onsubmit validation ฉันต้องการการตรวจสอบปุ่มจริง ๆ
ไม่เพียง แต่รหัสจะชัดเจนยิ่งขึ้น แต่ยังเป็นที่ที่ต้องเป็น เพียงจำไว้ว่า: - ฉันไม่ต้องการให้ JavaScript ตรวจสอบความถูกต้องของรูปแบบ (ซึ่งจะต้องทำโดย PHP ที่ฝั่งเซิร์ฟเวอร์เสมอ) - ฉันต้องการแสดงข้อความที่บอกให้ผู้ใช้ทุกคนเห็นว่าฟิลด์ทั้งหมดต้องไม่ว่างเปล่า ข้าง)
ดังนั้นทำไมบางคน (คิดหรือบอกฉัน) จะต้องทำในการตรวจสอบ onsumbit? ไม่ฉันไม่ได้ทำการตรวจสอบความถูกต้องที่แนวคิด ฉันแค่กดปุ่มทำอะไรสักอย่างแล้วทำไมไม่ปล่อยให้มันทำ?
ด้วยรหัสและรูปแบบที่หลอกลวงได้อย่างสมบูรณ์แบบ ใน JavaScript ใด ๆ ที่ฉันต้องการส่งแบบฟอร์มที่ฉันใส่:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
และนั่นเป็นการข้ามการตรวจสอบเมื่อฉันไม่ต้องการ มันแค่ส่งแบบฟอร์มและโหลดหน้าอื่น ๆ
แต่ถ้าผู้ใช้คลิกปุ่มส่ง (aka type="button"
ไม่type="submit"
) การตรวจสอบจะทำก่อนที่จะให้ส่งแบบฟอร์มและถ้าไม่ถูกต้องไม่ได้ส่ง
หวังว่านี่จะช่วยให้ผู้อื่นไม่ลองใช้รหัสที่ยาวและซับซ้อน เพียงแค่ไม่ใช้ถ้าไม่จำเป็นต้องและการใช้งานonsubmit
onclick
แต่อย่าลืมเปลี่ยนtype="submit"
ไปใช้type="button"
อย่าลืมsubmit()
จาวาสคริปต์ด้วย