TL; DR:ไม่สนใจเบราว์เซอร์เก่าใช่ไหม ใช้form.reportValidity()
.
ต้องการการสนับสนุนเบราว์เซอร์เดิมหรือไม่ อ่านต่อ.
มันจริงเป็นไปได้ที่จะตรวจสอบด้วยตนเองทริกเกอร์
ฉันจะใช้ JavaScript ธรรมดาในคำตอบของฉันเพื่อปรับปรุงการนำกลับมาใช้ใหม่ไม่จำเป็นต้องใช้ jQuery
สมมติรูปแบบ HTML ต่อไปนี้:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
และมาคว้าองค์ประกอบ UI ของเราใน JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
ไม่ต้องการการสนับสนุนสำหรับเบราว์เซอร์เดิมเช่น Internet Explorer ใช่หรือไม่ นี่ของคุณ.
เบราว์เซอร์ที่ทันสมัยทั้งหมดสนับสนุนreportValidity()
วิธีการเกี่ยวกับform
องค์ประกอบ
triggerButton.onclick = function () {
form.reportValidity()
}
เท่านี้เราก็เสร็จแล้ว นอกจากนี้นี่คือ CodePen ง่ายๆโดยใช้แนวทางนี้
แนวทางสำหรับเบราว์เซอร์รุ่นเก่า
ด้านล่างนี้คือคำอธิบายโดยละเอียดว่าreportValidity()
จะจำลองได้อย่างไรในเบราว์เซอร์รุ่นเก่า
อย่างไรก็ตามคุณไม่จำเป็นต้องคัดลอกและวางบล็อคโค้ดเหล่านั้นลงในโปรเจ็กต์ของคุณด้วยตัวคุณเองเพราะมีponyfill / polyfillพร้อมให้คุณใช้งาน
reportValidity()
ไม่รองรับตรงไหนเราต้องหลอกเบราว์เซอร์เล็กน้อย แล้วเราจะทำอย่างไร?
- ตรวจสอบความถูกต้องของแบบฟอร์มโดยโทร
form.checkValidity()
. สิ่งนี้จะบอกเราว่าแบบฟอร์มถูกต้องหรือไม่ แต่ไม่แสดง UI การตรวจสอบความถูกต้อง
- หากแบบฟอร์มไม่ถูกต้องเราจะสร้างปุ่มส่งชั่วคราวและเริ่มการคลิก เนื่องจากแบบฟอร์มไม่ถูกต้องเราจึงทราบว่าจะไม่ส่งจริงอย่างไรก็ตามจะแสดงคำแนะนำการตรวจสอบความถูกต้องให้กับผู้ใช้ เราจะลบปุ่มส่งชั่วคราวทันทีดังนั้นผู้ใช้จะไม่เห็นปุ่มนี้
- หากแบบฟอร์มถูกต้องเราไม่จำเป็นต้องเข้าไปยุ่งใด ๆ และปล่อยให้ผู้ใช้ดำเนินการต่อไป
ในรหัส:
triggerButton.onclick = function () {
if (!form.checkValidity()) {
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
}
}
รหัสนี้จะใช้งานได้กับเบราว์เซอร์ทั่วไป (ฉันได้ทดสอบสำเร็จแล้วจนถึง IE11)
นี่คือตัวอย่าง CodePen ที่ใช้งานได้