TL; DR: Eski tarayıcıları umursamıyor musunuz? Kullanın form.reportValidity().
Eski tarayıcı desteğine mi ihtiyacınız var? Okumaya devam etmek.
Aslında ise elle tetik doğrulama mümkün.
Yeniden kullanılabilirliği iyileştirmek için yanıtımda düz JavaScript kullanacağım, jQuery'ye gerek yok.
Aşağıdaki HTML formunu varsayın:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Ve şimdi JavaScript'teki UI öğelerimizi alalım:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Internet Explorer gibi eski tarayıcılar için desteğe ihtiyacınız yok mu? Bu sizin içindir.
Tüm modern tarayıcılarda desteklemekreportValidity() üzerine yöntemini formelemanları.
triggerButton.onclick = function () {
form.reportValidity()
}
İşte bu, bitirdik. Ayrıca, bu yaklaşımı kullanan basit bir CodePen burada .
Eski tarayıcılar için yaklaşım
Aşağıda, reportValidity()eski tarayıcılarda nasıl öykünülebileceğinin ayrıntılı bir açıklaması bulunmaktadır .
Ancak, bu kod bloklarını projenize kopyalayıp yapıştırmanıza gerek yoktur - sizin için hazır bir ponyfill / polyfill vardır.
reportValidity()Desteklenmeyen yerlerde , tarayıcıyı biraz kandırmamız gerekir. Peki ne yapacağız?
- Formun geçerliliğini arayarak kontrol edin
form.checkValidity(). Bu bize formun geçerli olup olmadığını söyleyecek, ancak doğrulama kullanıcı arayüzünü göstermeyecektir.
- Form geçersizse, geçici bir gönderme düğmesi oluşturur ve üzerine bir tıklama tetikleriz. Form geçerli olmadığından, aslında gönderilmeyeceğini biliyoruz , ancak kullanıcıya doğrulama ipuçları gösterecek. Geçici gönder düğmesini derhal kaldıracağız, böylece kullanıcı hiçbir zaman görmeyecektir.
- Form geçerliyse, hiçbir şekilde müdahale etmemize ve kullanıcının ilerlemesine izin vermemize gerek yoktur.
Kodda:
triggerButton.onclick = function () {
if (!form.checkValidity()) {
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
}
}
Bu kod hemen hemen tüm yaygın tarayıcılarda çalışacaktır (IE11'e kadar başarıyla test ettim).
İşte çalışan bir CodePen örneği.