0

我正在使用 jQuery 验证插件。

我有一个自定义验证器方法。它会查看电子邮件地址是否正在使用中。

$.validator.methods.notinuse = function (value, element, param) {

    $.post("/static/global/member/validation.ashx", { email: value})
    .done(function (data) {
        return data == "true";
    });
};

这就是所谓的。

$("#form-Registration").validate({
    rules: {
        Email: {
            notinuse: ''
        }
    },
    messages: {
        Email: {
            notinuse: "Email address in use"

        }
    }
});

这是可行的,但是,它似乎会在每次按键触摸时触发,这有点太频繁了。

我的问题:

1)使用自定义验证器方法,有没有办法配置它被调用的事件?我认为无论是提交表单还是关闭文本字段焦点都可以解决问题。我想让它与 js 查询 api 保持一致。

4

1 回答 1

2

正确的格式是将您的自定义方法/规则设置为true或者传递一个参数,而不是将其设置为''. 您还将notinuse字段名称拼错messages为 as inuse

至于不是在每个键上触发它,您可以将onkeyup选项设置为 false。这会将您的方法限制为仅在聚焦和提交点击时触发。但是,此设置将影响表单上的所有字段。

$("#form-Registration").validate({
    onkeyup: false, // <-- disable "onkeyup" for all form fields
    rules: {
        Email: {
            notinuse: true
        }
    },
    messages: {
        Email: {
            notinuse: "Email address in use"

        }
    }
});

如果您只想禁用这一字段,您可以设置onkeyup为自定义功能。在此示例中,如果元素匹配,则在 key up 上没有验证,否则,默认函数用于所有其他字段。onkeyupnamenotinuseonkeyup

$("#form-Registration").validate({
    onkeyup: function( element, event ) {
        if (element.name === "notinuse") {
            return false;
        } else if ( event.which === 9 && this.elementValue(element) === "" ) {
            return;
        } else if ( element.name in this.submitted || element === this.lastElement ) {
            this.element(element);
        }
    },
    rules: {
        Email: {
            notinuse: true
        }
    },
    messages: {
        Email: {
            notinuse: "Email address in use"

        }
    }
});

演示 1(一个字段禁用了 onkeyup 的两个字段):http: //jsfiddle.net/E9WNy/

演示 2(您的代码为您的单个字段禁用了 onkeyup) :http : //jsfiddle.net/CJzJr/

于 2013-09-05T14:46:40.693 回答