我正在使用jQuery Validate插件来验证我的表单。我的表格中有一对出发地和目的地城市,以及一对开始和结束日期。我希望onfocusout函数仅在机场字段中都具有相同代码的情况下才起作用。

我的下面的代码...

$(function () {
    var validator = $("#testForm").validate({
        errorClass: "errorMsg",
        errorElement: "span",
        rules: {
            fromAirport: {
                "required": true,
                "onfocusout": true
            },
            toAirport: {
                "required": true,
                "onfocusout": true
            },
            fromDate: {
                "required": true,
                "onfocusout": false
            }
            toDate: {
                "required": true,
                "onfocusout": false
            }
        },
        messages: {
            fromAirport: {
                "required": "fromAirportis required!"
            },
            toAirport: {
                "required": "toAirportis required!"
            }
            fromDate: {
                "required": "fromDateis required!"
            },
            toDate: {
                "required": "toDate is required!"
            },
        },
        onfocusout: function(el) {
            if (!this.checkable(el)){
                this.element(el);
            }
        },
        submitHandler: function (form) {
        }
    });
});


jsFiddle:https://jsfiddle.net/4yegctz5/1/

最佳答案

关于此代码...

onfocusout: function(el) {
    if (!this.checkable(el)){
        this.element(el);
    }
},



什么是checkable?有no such thing represented in this plugin


关于此代码...

rules: {
    fromAirport: {
        "required": true,
        "onfocusout": true // <- No such rule
    }, ...



"onfocusout"不是规则。它只是由表单中的“事件”触发的回调函数。此外,尽管可以创建任何自定义规则,但是不能创建影响验证事件的自定义规则。




  OP的标题:“使用jQuery Validate专注于某些特定领域”


您唯一的解决方案是按如下方法覆盖onfocusout函数。我只是将任意class放在要在onfocusout事件上求值的任何字段上。然后,自定义onfocusout函数使用条件检查此类的元素,然后触发验证。

onfocusout: function(element) {
    if ($(element).hasClass('ofo')) {
        this.element(element);
    }
},


演示:https://jsfiddle.net/4yegctz5/3/

09-19 14:53