TL; DR: Không quan tâm đến các trình duyệt cũ? Sử dụngform.reportValidity()
.
Cần hỗ trợ trình duyệt cũ? Đọc tiếp.
Nó thực sự là có thể để xác nhận kích hoạt bằng tay.
Tôi sẽ sử dụng JavaScript đơn giản trong câu trả lời của mình để cải thiện khả năng tái sử dụng, không cần jQuery.
Giả sử dạng HTML sau:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Và hãy lấy các phần tử giao diện người dùng của chúng tôi trong JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Bạn không cần hỗ trợ cho các trình duyệt cũ như Internet Explorer? Cái này dành cho bạn.
Tất cả các trình duyệt hiện đại hỗ trợ các reportValidity()
phương pháp trên form
các yếu tố.
triggerButton.onclick = function () {
form.reportValidity()
}
Vậy là xong. Ngoài ra, đây là một CodePen đơn giản sử dụng phương pháp này.
Phương pháp tiếp cận cho các trình duyệt cũ hơn
Dưới đây là giải thích chi tiết cách reportValidity()
có thể được mô phỏng trong các trình duyệt cũ hơn.
Tuy nhiên, bạn không cần phải tự mình sao chép và dán các khối mã đó vào dự án của mình - có một ponyfill / polyfill luôn sẵn sàng cho bạn.
Chỗ nào reportValidity()
không được hỗ trợ thì chúng ta cần đánh lừa trình duyệt một chút. Vậy chúng ta sẽ làm gì?
- Kiểm tra tính hợp lệ của biểu mẫu bằng cách gọi
form.checkValidity()
. Điều này sẽ cho chúng tôi biết nếu biểu mẫu hợp lệ, nhưng không hiển thị giao diện người dùng xác thực.
- Nếu biểu mẫu không hợp lệ, chúng tôi tạo một nút gửi tạm thời và kích hoạt một cú nhấp chuột vào nó. Vì biểu mẫu không hợp lệ nên chúng tôi biết rằng biểu mẫu này sẽ không thực sự gửi, tuy nhiên, nó sẽ hiển thị gợi ý xác thực cho người dùng. Chúng tôi sẽ xóa nút gửi tạm thời ngay lập tức, vì vậy nó sẽ không bao giờ hiển thị cho người dùng.
- Nếu biểu mẫu hợp lệ, chúng tôi không cần can thiệp gì cả và để người dùng tiếp tục.
Trong mã:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
Mã này sẽ hoạt động trên hầu hết mọi trình duyệt phổ biến (Tôi đã thử nghiệm thành công nó xuống IE11).
Đây là một ví dụ CodePen đang hoạt động.