19

jquery 検証構成で、onkeyup を true に設定すると、次のエラーが発生します。falseに設定すると機能しますが、フィールドをぼかすまで検証フィードバックが得られず、各キーアップで検証を取得しようとしています:

$("#signupForm").validate({
        onkeyup: true,        
        onclick: false
        // rules omitted for brevity
    }

次のエラーが表示されます。

TypeError: validator.settings[eventType].call is not a function
validator.settings[eventType].call(validator, this[0], event);
jquery.validate.js line 391
4

5 に答える 5

39

実際にonkeyupは、検証される要素をパラメーターとして受け入れる関数にオプションを設定する必要があるため、次のように変更してみてください。

onkeyup: true, 

onkeyup: function(element) {$(element).valid()}
于 2013-02-27T03:20:34.143 に答える
36

onkeyupはデフォルトで有効になっているため、に設定する必要はありませんtrue。そうすると、プラグインにすでに組み込まれている機能が壊れます。

3つのオプションがあります。


1) オプションonkeyupをから外します.validate()。これにより、onkeyup機能がデフォルトで有効になります。(編集:「デフォルト」とは、フィールドが最初に別のイベントによって検証された後にのみ、すべての「キーアップ」イベントで検証が行われることを意味します。)

デモ:http: //jsfiddle.net/ZvvTa/


2) このオプションを無効onkeyupにするように設定できます。false

デモ:http: //jsfiddle.net/ZvvTa/1/


3)onkeyup独自のコールバック関数に 置き換えて、動作方法を変更します。(デモはデフォルト機能を使用します)

デモ:http: //jsfiddle.net/ZvvTa/2/

以下は、デフォルト変更onkeyupれていないコールバック関数です。

onkeyup: function( element, event ) {
    if ( event.which === 9 && this.elementValue(element) === "" ) {
        return;
    } else if ( element.name in this.submitted || element === this.lastElement ) {
        this.element(element);
    }
}

参照: http ://docs.jquery.com/Plugins/Validation/validate#toptions


編集

デフォルトでは、プラグインは、フィールドが別のイベントによって最初に検証される まで「キーアップ」検証を行いません。(「レイジー」検証)

したがって、これは、即時検証 を提供する、より適切に変更されたバージョンのonkeyupコールバック関数です。(「熱心な」検証) onkeyup

デモ:http: //jsfiddle.net/QfKk7/

onkeyup: function (element, event) {
    if (event.which === 9 && this.elementValue(element) === "") {
        return;
    } else {
        this.element(element);
    }
}
于 2013-02-27T04:10:46.947 に答える
5

@Sparkyは正しいです。正しい答えはonkeyupオプションを削除することです。私のフィドルは、onkeyupオプションをに変更したからではなく、オプションを削除したために機能していましたkeyup

デフォルトでは、キーアップ イベントで検証が行われます。この機能をオフにしたい場合は、設定を追加する必要がありますonkeyup: false

更新されたデモをご覧ください。

デモ:フィドル

于 2013-02-27T03:18:26.947 に答える
3

ブール値は、onkeyupイベントの有効な値ではありません。代わりに、実行する必要があることについて関数を追加します。次のようなものを試してください:

    onkeyup: function(element) {
           $(element).valid(); 
    }
    onblur: function(element) { 
         $(element).valid(); 
    }
于 2013-02-27T03:21:55.150 に答える
2

onkeyup を拡張するのはどうですか:

    $('#signup-form').validate({

        onkeyup: function(element) {
            var element_id = $(element).attr('id');
            if (this.settings.rules[element_id].onkeyup !== false) {
                $(element).valid();
            }
        },

したがって、ルール内でこれを行うことができます:

        rules: {
            username: {
                required: true,
                minlength: 3,
                maxlength: 25,
                onkeyup: false, /* on blur validation */
            },
            password: {
                required: true,                   
                passwordmeter: true,
                onkeyup: true, /* on keyup validation */
            },

onkeyupを拡張することで、これをデフォルトの動作にしたので、固定onkeyup: trueはオプションです。

于 2016-09-02T08:32:39.920 に答える