ดังนั้นฉันจะไปลึกลงไปอีกเล็กน้อยว่าทำไมถึงไม่ได้ผลเพราะฉันเป็นคนประเภทที่นอนไม่หลับตอนกลางคืนโดยที่ไม่รู้ว่าฮ่าฮ่า ฉันใช้ jQuery validate 1.10 และ Microsoft jQuery ไม่ผ่านการตรวจสอบความถูกต้อง 2.0.20710.0 ซึ่งเผยแพร่เมื่อ 1/29/2013
ฉันเริ่มต้นด้วยการค้นหาวิธี setDefaults ใน jQuery Validate และพบในบรรทัดที่ 261 ของไฟล์ที่ไม่ระบุ ฟังก์ชั่นทั้งหมดนี้ทำจริงๆคือรวมการตั้งค่า json ของคุณเข้ากับที่มีอยู่$.validator.defaults
ซึ่งเริ่มต้นด้วยคุณสมบัติการเพิกเฉยที่ถูกตั้งค่าเป็น ": hidden" พร้อมกับค่าเริ่มต้นอื่น ๆ ที่กำหนดไว้ใน jQuery Validate ดังนั้นเมื่อถึงจุดนี้เราก็ไม่สนใจเลย ตอนนี้เรามาดูกันว่าคุณสมบัติค่าเริ่มต้นนี้อยู่ที่ไหน
เมื่อฉันตรวจสอบรหัสเพื่อดูว่า$.validator.defaults
มีการอ้างอิง ฉันสังเกตเห็นว่าตัวสร้างถูกใช้โดยตัวตรวจสอบความถูกต้องของฟอร์มเท่านั้นบรรทัดที่ 170 ใน jQuery จะตรวจสอบความถูกต้องของไฟล์ที่ไม่ได้ระบุ
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
ณ จุดนี้เครื่องมือตรวจสอบจะรวมการตั้งค่าเริ่มต้นใด ๆ ที่ตั้งค่าไว้และแนบไปกับเครื่องมือตรวจสอบความถูกต้องของฟอร์ม เมื่อคุณดูรหัสที่ใช้ในการตรวจสอบความถูกต้องการไฮไลต์การไฮไลต์ ฯลฯ พวกเขาทั้งหมดใช้วัตถุ validator.settings เพื่อดึงคุณสมบัติการเพิกเฉย ดังนั้นเราต้องตรวจสอบให้แน่ใจว่าเราจะตั้งค่าการเพิกเฉยด้วยเมธอด setDefaults มันจะต้องเกิดขึ้นก่อนที่จะมีการเรียกใช้ $ ("form") validate ()
หากคุณกำลังใช้ Asp.net MVC และปลั๊กอินที่ไม่สร้างความรำคาญคุณจะรู้ว่าหลังจากใช้จาวาสคริปต์ที่ตรวจสอบความถูกต้องแล้วจะถูกเรียกใช้ใน document.ready ฉันยังเรียกว่า setDefaults ของฉันใน document.ready block ซึ่งจะดำเนินการหลังจากสคริปต์ตรวจสอบ jQuery และไม่เป็นการรบกวนเพราะฉันได้กำหนดสคริปต์เหล่านั้นใน html ก่อนที่จะมีการเรียกใช้ ดังนั้นการโทรของฉันจึงไม่มีผลกระทบต่อการทำงานเริ่มต้นของการข้ามองค์ประกอบที่ซ่อนอยู่ในระหว่างการตรวจสอบความถูกต้อง มีตัวเลือกสองสามตัวที่นี่
ตัวเลือกที่ 1 - คุณอาจทำตามที่ Juan Mellado ชี้ให้เห็นว่ามีการโทรออกนอกเอกสารซึ่งจะดำเนินการทันทีที่โหลดสคริปต์ ฉันไม่แน่ใจเกี่ยวกับช่วงเวลานี้เนื่องจากเบราว์เซอร์สามารถทำการโหลดสคริปต์แบบขนานได้แล้ว หากฉันเป็นเพียงความระมัดระวังโปรดแก้ไขให้ถูกต้อง นอกจากนี้ยังอาจมีวิธีการรอบนี้ แต่สำหรับความต้องการของฉันฉันไม่ได้ลงเส้นทางนี้
ตัวเลือกที่ 2a - เดิมพันที่ปลอดภัยในสายตาของฉันเป็นเพียงการเปลี่ยน$.validator.setDefaults({ ignore: '' });
ภายในของเหตุการณ์ document.ready $("form").data("validator").settings.ignore = "";
กับ สิ่งนี้จะแก้ไขคุณสมบัติการเพิกเฉยที่ jQuery ใช้จริงตรวจสอบเมื่อทำการตรวจสอบแต่ละครั้งในองค์ประกอบของคุณสำหรับแบบฟอร์มที่กำหนด
ตัวเลือก 2b - หลังจากดูรหัสอีกเล็กน้อยคุณสามารถใช้$("form").validate().settings.ignore = "";
เป็นวิธีการตั้งค่าคุณสมบัติการเพิกเฉยได้ เหตุผลก็คือเมื่อดูที่ฟังก์ชันตรวจสอบความถูกต้องมันจะตรวจสอบเพื่อดูว่าวัตถุตัวตรวจสอบความถูกเก็บไว้แล้วสำหรับองค์ประกอบของฟอร์มผ่าน$.data()
ฟังก์ชั่น หากพบวัตถุตรวจสอบความถูกเก็บไว้กับองค์ประกอบแบบฟอร์มก็แค่ส่งกลับวัตถุตรวจสอบความถูกต้องแทนการสร้างอีกหนึ่ง