0

我只需要在表单的一个或两个元素上而不是每个元素上使用 focusCleanup。有没有办法将 jquery.validate 中的focusCleanup应用到几个输入字段而不是全部?例如,我想在焦点上清理 input1 和 input2 而不是 input3。我尝试将 focusCleanup 添加到规则中,但这不起作用。有任何想法吗?

$("#myForm").validate({
    onkeyup: false,
    focusCleanup: true,
    rules: {
        input1: {
            required: true,
        },
        input2: {
            required: true,
        },
        input3: {
            required: true,
        },
    },
    messages: {
        input1: {
            required: Messages.ERR_USERNAME_GUIDE,
        },
        input2: {
            required: Messages.ERR_PASSWORD_GUIDE,
        },
        input3: {
            required: Messages.ERR_PASSWORD_GUIDE,
        },
    }
});
4

1 回答 1

0

在jquery validate的文档选项中没有推荐的方法来执行此操作,但是您可以通过传入您自己的 onfocusin 函数作为选项来实现此目的。

在下面的示例中,我给不需要清理的元素一个类“nocleanup”。然后我复制了默认的 onfocusin 方法,插入了一个 if 语句来检查这个类的存在。

html表单摘录

<input name="fname" id="fname" class="required">
<input name="sname" id="sname" class="required nocleanup">
<input name="other" id="other" class="required">

带验证码

$("form").validate({
    focusInvalid: false,
    focusCleanup: true,
    onfocusin: function (element, event) {
        this.lastActive = element;

        if (!$(element).hasClass("nocleanup")) {
            if (this.settings.focusCleanup && !this.blockFocusCleanup) {
                if (this.settings.unhighlight) {
                    this.settings.unhighlight.call(this, element, this.settings.errorClass, this.settings.validClass);
                }
                this.addWrapper(this.errorsFor(element)).hide();
            }
        }
    },
    submitHandler: function () {
        alert('form ok');
    }
});

注意。focusin 是默认 focusin 方法的直接副本,只是添加了一个 if 语句。

试试这里的小提琴

于 2013-02-06T14:09:16.377 回答