cách kiểm tra xem biểu mẫu có hợp lệ theo chương trình hay không bằng cách sử dụng Plugin xác thực jQuery


93

Tôi có một biểu mẫu với một vài nút và tôi đang sử dụng Plugin xác thực jQuery từ http://jquery.bassistance.de/validate/ . Tôi chỉ muốn biết liệu có cách nào tôi có thể kiểm tra xem biểu mẫu có được coi là ở trạng thái hợp lệ hay không bằng plugin xác thực jquery từ bất kỳ đâu trong mã javascript của tôi.


2
Đối với những người có nhu cầu sử dụng HTML5 và vani JS (không jQuery): stackoverflow.com/questions/12470622/...
2.540.625

Câu trả lời:


142

Sử dụng .valid()từ plugin jQuery Validation:

$("#form_id").valid();

Kiểm tra xem biểu mẫu đã chọn có hợp lệ hay không hoặc liệu tất cả các phần tử đã chọn có hợp lệ hay không. validate () cần được gọi trên biểu mẫu trước khi kiểm tra nó bằng phương pháp này.

Trong đó biểu mẫu với id='form_id'là biểu mẫu đã được .validate()gọi trên nó.


Cảm ơn bạn, tôi đã thực hiện một số việc như: $ j ("# myform label.error"). Each (function (i, e) {if ($ j (e) .css ('display')! = 'None' ) {tồn tạiErrors = true;}}); : S Cảm ơn
Jaime Hablutzel

@jaime: Không có vấn đề, rất vui khi được giúp đỡ:)
Andrew Whitaker

Thực ra không cần phải chạy .validate () trên biểu mẫu trước. Bạn chỉ cần thực hiện if (form.valid ()) {} và điều đó sẽ hoạt động, trong đó 'form' là thành phần biểu mẫu bạn đang nhắm mục tiêu.
Gareth Daine

11
TypeError: $ ("# myForm"). Valid () không phải là một hàm.
artgrohe

2
Nếu bạn đang nhận được một TypeError valid() not a functionplugin, hãy thêm plugin vào tệp của bạn vì nó là một plugin không có trong thư viện jquery, ví dụ. <script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
StackEdd

33

Câu trả lời năm 2015: chúng tôi đã có điều này trên các trình duyệt hiện đại, chỉ cần sử dụng API HTML5 CheckValidity từ jQuery. Tôi cũng đã tạo một mô-đun jquery-html5-valid để thực hiện việc này:

npm install jquery-html5-validity

Sau đó:

var $ = require('jquery')
require("jquery-html5-validity")($);

thì bạn có thể chạy:

$('.some-class').isValid()

true

1
chúng ta có thể gọi nó ở dạng toàn bộ không trên mỗi phần tử không?
parisssss

1
Tuyệt quá! chỉ là những gì tôi đang tìm kiếm
mưng mủ

Tôi thích điều này hơn là validhàm vì nó không gọi validatehàm và xác thực biểu mẫu của bạn.
KevinAdu,

@parisssss Đã tạo một mô-đun để thực hiện việc đó trên nhiều lựa chọn theo yêu cầu.
mikemaccana

19

@mikemaccana câu trả lời rất hữu ích.

Và tôi cũng đã sử dụng https://github.com/ryanseddon/H5F . Tìm thấy trên http://microjs.com . Đó là một số loại polyfill và bạn có thể sử dụng nó như sau (jQuery được dùng trong ví dụ):

if ( $('form')[0].checkValidity() ) {
    // the form is valid
}

cái này là tốt hơn vì nó không hình thức kích hoạt xác nhận
Bishoy Hanna

Làm việc với thuộc tính mẫu. Cảm ơn.
MJ Vakili


4

iContribute: Không bao giờ là quá muộn cho một câu trả lời đúng.

var form = $("form#myForm");
if($('form#myForm > :input[required]:visible').val() != ""){
  form.submit();
}else{
  console.log("Required field missing.");
}

Bằng cách này, xác thực HTML5 cơ bản cho các trường 'bắt buộc' sẽ diễn ra mà không ảnh hưởng đến quá trình gửi tiêu chuẩn bằng cách sử dụng các giá trị 'tên' của biểu mẫu.


Lưu ý rằng :input:visiblebộ chọn là phần mở rộng jQuery và không phải là một phần của CSS. Xem chi tiết trong tài liệu
Geradlus_RU

3
Một biểu mẫu cũng có thể không hợp lệ vì đối sánh mẫu và không chỉ vì thiếu các trường bắt buộc
thẳng thắn

4

Đối với một nhóm đầu vào, bạn có thể sử dụng phiên bản cải tiến dựa trên câu trả lời của @ mikemaccana

$.fn.isValid = function(){
    var validate = true;
    this.each(function(){
        if(this.checkValidity()==false){
            validate = false;
        }
    });
};

bây giờ bạn có thể sử dụng điều này để xác minh xem biểu mẫu có hợp lệ không:

if(!$(".form-control").isValid){
    return;
}

Bạn có thể sử dụng cùng một kỹ thuật để nhận được tất cả các thông báo lỗi:

$.fn.getVelidationMessage = function(){
    var message = "";
    var name = "";
    this.each(function(){
        if(this.checkValidity()==false){
            name = ($( "label[for=" + this.id + "] ").html() || this.placeholder || this.name || this.id);
            message = message + name +":"+ (this.validationMessage || 'Invalid value.')+"\n<br>";
        }
    })
    return message;
}

Tôi đã tạo một plugin jQuery để thực hiện .each () cho bạn.
mikemaccana

1

Đối với Magento, bạn kiểm tra xác thực của biểu mẫu bằng cách như bên dưới.

Bạn có thể thử điều này:

require(["jquery"], function ($) {
    $(document).ready(function () {
        $('#my-button-name').click(function () { // The button type should be "button" and not submit
            if ($('#form-name').valid()) {
                alert("Validation pass");
                return false;
            }else{
                alert("Validation failed");
                return false;
            }
        });
    });
});

Hy vọng điều này có thể giúp bạn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.