仅对某些元素进行jquery.validate focusCleanup

时间:2013-02-06 07:59:00

标签: jquery validation jquery-validate focus

我只需要在表单的一个或两个元素上使用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,
        },
    }
});

1 个答案:

答案 0 :(得分:0)

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

在下面的例子中,我给出了不需要清理类'nocleanup'的元素。然后我复制了default onfocusin method,插入一个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');
    }
});

NB。 focusin是default focusin method的直接副本,只添加了一个if语句。

尝试fiddle here