web-dev-qa-db-ja.com

ASP.net MVC 3jQuery検証;邪魔にならないOnKeyUpを無効にしますか?

特定のバリデーター(クレジットカード)のjQuery検証を無効にして、onkeyupではなくonblurでのみ発生するようにする方法はありますか?

JQuery Validatorのドキュメントに基づいて、私は次のようなことができると思いました。

$(function () {
    $("[data-val-creditcard]").validate({
        onkeyup: false
    })
});

ただし、機能していないようです。

また、バリデーターで次のことを試してみました。

public class CreditCardValidator : DataAnnotationsModelValidator<CreditCardAttribute>
{
    string _message;

    public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute)
        : base(metadata, context, attribute)
    {
        _message = attribute.ErrorMessage;
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = _message,
            ValidationType = "creditcard"
        };
        rule.ValidationParameters.Add("onkeyup", false);
        return new[] { rule };
    }
}

それも機能しませんが、ValidationParametersの適切な使用法を突き刺していました。

フォームにクレジットカード番号を入力し、それを無効から有効にランダムに変更してから無効に戻すのは、ちょっと面倒です。

何か案は?ありがとう!

25
Sam

みんな、

私は同じ問題を抱えていて、このスレッドを見つけました: http://old.nabble.com/-validate--onkeyup-for-single-field-td21729097s27240.html

基本的には、キーアップイベントを上書きしてfalseを返すという考え方です。したがって、特定のケースでは、以下を追加する必要があります。

$('#my-form').validate({
   rules: {
     [...]
   }
} 
// Disable keyup validation for credit card field
$("[data-val-creditcard]").keyup(function() { return false } );

また、クレジットカードフィールドはぼかしまたは送信時にのみチェックされていることがわかります(ただし、残りはキーアップにも取り組んでいます)。

同じ解決策を探していたところ、ここでの答えが改善される可能性があることがわかったので、ここでそれを共有するのはいいことだと思いました。

21
mTorres

$.validator.setDefaultsバリデーターは内部で初期化されるため、目立たない検証では機能しません。

目立たない検証を使用するフォームの設定を変更するには、次のようにします。

var validator = $("form").data("validator");
if (validator) {
    validator.settings.onkeyup = false; // disable validation on keyup
}
21
Ben Foster

これは古い投稿だと思いますが、この質問に答えている回答はありません。

Onkeyupを無効にしてonblurを有効にする方法は?

私はこれを探していたので、答えを共有したいと思いました。

ベン・フォスターが正しく言ったように、onkeyupは次のようにすることで無効にできます

var validator = $("form").data("validator");
if (validator) {
    validator.settings.onkeyup = false;
}

Onblurの検証を有効にするには、onfocusoutを使用できます

validator.settings.onfocusout = function(element)
{
    $(element).valid();
};

したがって、onkeyupを無効にしてonblurを有効にするコードは次のようになります

var validator = $("form").data("validator");
        if (validator)
        {
            validator.settings.onkeyup = false; 
            validator.settings.onfocusout = function(element)
            {
                $(element).valid();
            };
        }
9
Colin Bacon

特定のフィールドに設定する方法がわかりませんが、これを試してキーアップ検証を無効にすることができます(すべてのフィールドに対して):

$.validator.setDefaults({
   onkeyup: false
})

見る

5
epzee

上記のようなものを使用することもできます、

$("form").validate({
    onfocusout: false,
    onkeyup: false
});

カスタムルールがある場合は、

$("form").validate({
    onfocusout: false,
    onkeyup: false,
    rules: {
        "name1": {
            required: true,
            email: true,
            maxlength: 100
        },
        "name2": {
            required: true,
            number: true
        }
    }
});

この回答 jQueryフォーラムで私は大いに助けられました。

1

クレジットフィールドのonfocusイベントでデフォルトをオフに設定してから、onblurでそれらをオンにすることができます。ハッキーのようですが、動作する可能性があります。

0