1

単純なタスクのように見えますが、その方法を理解するのに苦労しています。

jquery 検証プラグインで検証するフォームがあります。text/textarea フィールドにすべての有効な ascii 文字があることを検証するカスタム検証があり、$.validator.addMethod() 機能を使用してクラス「ascii」を持つ任意のフィールドにそれをフックします。

私の問題は、検証を維持したいということですが、それらのガベージ文字をクリーンアップする別の短い JavaScript 関数もあります。検証が無効であると不平を言う前に、入力フィールドでクリーンアップを実行したいと思います。

true または false を返す前に検証メソッドにクリーンアップを入れようとしましたが、うまくいきませんでした。それをぼかしイベントにバインドしようとしましたが、うまくいきませんでした。

キーアップイベントにバインドするとうまくいきますが、それはハックのように感じます。そのフィールドの有効性をチェックする前にクリーンアップすることを認識できるように、そのことを検証に結び付けてもらいたいだけです。

ここで bindFirst という jquery 拡張機能を見つけました: How to order events bound with jQuery

クリーンアップを「最初に」ぼかしイベントにバインドしようとしましたが、うまくいきませんでした。

「依存」機能を使用して必要なものを引き出すことができると思いますが、カスタム検証を使用する場合、それはオプションではないようです。

私が言及したすべてのシナリオで..クリーンアップを実行しますが、フィールドが無効であるとすでに不平を言うまでは実行しません。フィールドに戻って元に戻すだけで、エラー メッセージが消去されます。

どんな助けでも大歓迎です。

4

1 に答える 1

1

Validate プラグインの組み込みコールバック関数の 1 つを利用するだけです。を使用する場合onfocusoutは、デフォルトのonfocusoutコールバック関数を変更してください。

デフォルトonfocusoutのコールバック:

onfocusout: function( element, event ) {
    if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
         this.element(element);
    }
}

推奨される使用法:

他のフィールドに干渉しないように、コア機能がどのように保持されているかに注目してください。

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        // rules & options,
        onfocusout: function (element, event) {
            if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
                if (element.name == "yourfield") {
                    // your code to do cleanup on name="yourfield"
                }
                this.element(element);  // <-- this triggers validation on the field
            }
        }
    });

});

実際のデモ: http://jsfiddle.net/WTjTy/

デモは、指定されたフィールドのぼかしで、エラーが表示される直前に、モックの「クリーンアップ」をトリガーしますinput

于 2013-02-19T20:38:09.037 に答える