0

各要素ではなく、フォームの 1 つまたは 2 つの要素に対してのみ 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 に答える