ฉันสามารถทำเครื่องหมายฟิลด์ไม่ถูกต้องจากจาวาสคริปต์ได้หรือไม่?


94

จากการอ่านโพสต์นี้ฉันพบว่ามีคลาสหลอกสำหรับค่าอินพุต 'ถูกต้อง' และ 'ไม่ถูกต้อง' ที่นำมาใช้กับ HTML5

มีวิธีใดบ้างที่ฉันสามารถทำเครื่องหมายช่องป้อนข้อมูลว่าไม่ถูกต้อง / ถูกต้องจากจาวาสคริปต์ หรือฉันสามารถแทนที่วิธีการตรวจสอบความถูกต้องที่ใช้ได้หรือไม่?


คุณสามารถเพิ่มคลาสที่ "ไม่ถูกต้อง" เป็นสองเท่าได้เสมอ แต่น่าสนใจมากที่ได้เรียนรู้ว่ามีวิธีที่ดีกว่านี้
Pointy

1
ใช่แน่นอน แต่มันจะน่าเบื่อ;)
Svish

1
Svish คุณสามารถประเมินคำตอบด้านล่างอีกครั้งได้หรือไม่? ดูเหมือนว่า dajavax จะให้คำตอบที่ตรงตามที่คุณต้องการ อาจเป็นประโยชน์สำหรับผู้เยี่ยมชมคนอื่น ๆ หากคุณทำเครื่องหมายคำตอบของ dajavax เป็นคำตอบที่ยอมรับ
Kodos Johnson

@KodosJohnson แน่นอนขอบคุณสำหรับหัวขึ้น🙂
Svish

คำตอบ:


160

คุณสามารถใช้ฟังก์ชัน customValidity เพื่อจุดประสงค์นี้

หากคุณเพิ่มข้อความ customValidity ลงในฟิลด์ข้อความนั้นจะไม่ถูกต้อง เมื่อคุณตั้งค่าข้อความเป็นสตริงว่างข้อความจะใช้ได้อีกครั้ง (เว้นแต่ว่าจะไม่ถูกต้องเนื่องจากสาเหตุอื่น ๆ )

field.setCustomValidity("Invalid field."); จะทำให้ฟิลด์ไม่ถูกต้อง

field.setCustomValidity(""); จะทำให้ฟิลด์ถูกต้องเว้นแต่จะล้มเหลวข้อ จำกัด ของ HTML5


1
น่ากลัว ขอบคุณ. เพิ่มในcodepen.io/kevinSuttle/post/the-current-state-of-web-forms
Kevin Suttle

4
นอกจากนี้หากคุณต้องการให้ข้อความความถูกต้องของเบราว์เซอร์ปรากฏขึ้นinputหรือblurคุณสามารถใช้field.reportValidity () ได้ทันที
Sam Carlton

4

แก้ไข : มีคนชี้แจงว่าคุณกำลังมองหาแอตทริบิวต์ "ที่ถูกต้อง" "ไม่ถูกต้อง" สำหรับ DOM

dom_object.setAttribute("isvalid", "true")ฉันจะเพิ่มคุณลักษณะที่จะใช้แต่ละแท็ก คุณยังมีฟังก์ชันการตรวจสอบความถูกต้องส่วนกลางซึ่งจะอัปเดตแอตทริบิวต์เหล่านี้ทุกครั้ง (และใช้dom_object.getAttribute("isvalid")ทุกครั้ง)

คุณสามารถเรียกใช้ฟังก์ชันนี้ทุกครั้งที่องค์ประกอบสูญเสียโฟกัสหรือเมื่อใดก็ตามที่คุณต้องการ

ไม่สวยหรู แต่น่าเสียดายที่ตอนนี้ยังไม่มีการรองรับ "หลอก" กับจาวาสคริปต์และ HTML5


หากฉันเข้าใจคำถามของคุณคุณสามารถตรวจสอบความถูกต้องด้วย Javascript แต่จะเตือนว่ามันเป็นเรื่องง่ายมากที่จะตรวจสอบด้านลูกค้าหลีกเลี่ยงโดยเฉพาะอย่างยิ่งการตรวจสอบจาวาสคริปต์ คุณไม่ควรเชื่อถือข้อมูลไคลเอนต์และตรวจสอบทางฝั่งเซิร์ฟเวอร์เสมอ

ตัวอย่างเช่นฉันสามารถค้นหารหัสองค์ประกอบได้อย่างง่ายดายโดยการตรวจสอบซอร์สโค้ดจากนั้นทำการdocument.getElementById('some_id').setAttribute('max', new_number)เปลี่ยนค่าสูงสุด (นี่คือหนึ่งในรายการจากลิงก์ของคุณ)

มีหลายวิธีในการทำดังนั้นฉันจะพยายามให้สำนวนทั่วไปแก่คุณ

คุณสามารถรับค่าได้โดยการทำdocument.getElementById('form_element_id').value(ตรวจสอบให้แน่ใจว่าคุณให้แบบฟอร์มnameที่ถูกส่งไปยังเซิร์ฟเวอร์และidที่จาวาสคริปต์ใช้) สำหรับ textareas .innerHTMLคุณสามารถใช้

จากนั้นคุณมีค่าในตัวแปรมีหลายวิธีในการตรวจสอบ

if (parseInt(my_value) < 0) //errorตัวอย่างเช่นคุณสามารถทำ นอกจากนี้คุณยังสามารถใช้การแสดงออกปกติผมจะไม่อธิบายมันทั้งหมด แต่คุณสามารถเริ่มต้นที่นี่http://www.w3schools.com/jsref/jsref_obj_regexp.asp ฉันรู้ว่า w3schools ไม่ใช่แหล่งที่ดีที่สุด แต่ฉันคิดว่ามันเป็นจุดเริ่มต้นที่โอเค

ตอนนี้สำหรับส่วนการตรวจสอบความถูกต้อง: เพิ่มonsubmit="return validateForm()แท็กฟอร์มของคุณโดยที่ validateForm () เป็นฟังก์ชันที่ตรวจสอบทั้งหมด และฟังก์ชันจะส่งคืนtrueหากถูกต้องหรือเป็นfalseอย่างอื่น สิ่งนี้จะแทนที่ฟังก์ชันการตรวจสอบความถูกต้องเริ่มต้น (ซึ่งโดยค่าเริ่มต้นจะไม่ทำอะไรเลย)

ดังนั้นในตัวอย่างข้างต้นจะถูกแทนที่ด้วย//error return falseคุณสามารถทำอย่างอื่นได้เช่นกัน เช่นแจ้งเตือนข้อผิดพลาดแล้วส่งคืนเท็จ คุณยังสามารถใช้จาวาสคริปต์เพื่อเน้นฟิลด์ที่ไม่ถูกต้อง (ไม่แน่ใจว่านี่คือสิ่งที่คุณหมายถึงหรือไม่โดย " ทำเครื่องหมายช่องป้อนข้อมูลว่าไม่ถูกต้อง / ถูกต้องจากจาวาสคริปต์ ")

แน่นอนว่าหากคุณไม่ต้องการตรวจสอบฟิลด์ทั้งหมดคุณจะต้องส่งคืนจริงหากฟิลด์ใดฟิลด์หนึ่งผ่านเท่านั้น อีกครั้งคุณไม่ควรพึ่งพาสิ่งนี้ แต่ถ้าคุณเป็นเพียงการขัดขวางคนทั่วไปก็เป็นทางออกที่ง่าย


9
คุณถูกต้องครบถ้วน แต่ฉันคิดว่าคุณไม่เข้าใจคำถามทั้งหมด ใน HTML5 มีหลายวิธีในการเพิ่มค่าแอตทริบิวต์ให้กับมาร์กอัป HTML ที่บ่งบอกถึงกฎการตรวจสอบความถูกต้องในตัว เมื่อเบราว์เซอร์ใช้กฎเหล่านั้นช่องป้อนข้อมูลจะตรงกับคลาสหลอก ": valid" หรือ ": ไม่ถูกต้อง" ใน CSS ดังนั้นคุณสามารถเขียน HTML ที่มีแอตทริบิวต์เหล่านั้นและ CSS ด้วยตัวเลือก ": valid" และ ": ไม่ถูกต้อง" พร้อมกฎและให้ข้อเสนอแนะด้วยภาพโดยไม่ต้องใช้ JavaScript เลย คำถามคือว่าโดยพื้นฐานแล้วสถานะ ": valid" พร้อมใช้งานเป็นแอตทริบิวต์ DOM หรือไม่
Pointy

-17

มีวิธีใดบ้างที่ฉันสามารถทำเครื่องหมายช่องป้อนข้อมูลว่าไม่ถูกต้อง / ถูกต้องจากจาวาสคริปต์

น่าเสียดายที่คุณไม่สามารถจัดรูปแบบคลาสหลอกใน JavaScript ได้เนื่องจากไม่ใช่องค์ประกอบจริงจึงไม่มีอยู่ใน DOM จริง

ด้วยวานิลลา JavaScript คุณต้องการใช้การตรวจสอบ API

ใน jQuery คุณสามารถทำได้http://jsfiddle.net/elclanrs/Kak6S/

if ( $input.is(':invalid') ) { ... }

หรือฉันสามารถแทนที่วิธีการตรวจสอบความถูกต้องที่ใช้ได้หรือไม่?

หากคุณกำลังใช้การตรวจสอบความถูกต้องของ HTML5 ให้ยึดตามมาร์กอัป มิฉะนั้นคุณสามารถปิดใช้งานการตรวจสอบความถูกต้อง HTML5 ด้วย$form.attr('novalidate', 'novalidate')และใช้ JS เพื่อตรวจสอบความถูกต้องของฟิลด์ของคุณจากนั้นเพิ่มvalidหรือinvalidเรียนตามความจำเป็น ฉันสร้างปลั๊กอินที่ทำงานในลักษณะนี้เพื่อรองรับเบราว์เซอร์ที่ไม่ใช่ HTML5


คุณหมายความว่าอย่างไรคุณไม่สามารถจัดสไตล์ได้? ฉันทำไปแล้ว input:invalid + label::after{content: " INVALID";color: red;}เพิ่มข้อความที่ไม่ถูกต้องสีแดงหลังป้ายกำกับที่ฉันมีถัดจากช่องป้อนข้อมูลหากช่องนั้นไม่ถูกต้อง (ตัวอย่างเช่นหากช่องอีเมลมีอีเมลที่ไม่ถูกต้องอยู่)
Svish

11
"มีวิธีใดบ้างที่ฉันสามารถทำเครื่องหมายช่องป้อนข้อมูลว่าไม่ถูกต้อง / ถูกต้องจากจาวาสคริปต์" "น่าเสียดายที่คุณไม่สามารถจัดรูปแบบคลาสหลอกจาก JavaScript ได้" นั่นไม่ใช่สิ่งที่คำถามถาม
mikemaccana

คุณควรจะสามารถใช้ CSSOM เพื่อกำหนดคลาสใหม่ด้วยคลาสหลอกแบบไดนามิกแม้ว่า ...
Brett Zamir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.