1

これが以前に回答されている場合は申し訳ありませんが、検索時に何も掘り下げることができませんでした。

jQueryバリデーターのハイライトおよびハイライト解除メソッドをオーバーライドしていますが、メソッドの「ストック」バージョンも引き続き呼び出したいと考えています。C# では、たとえば base.unhighlight を呼び出すようなものです。

現状では、元のコードをコピーして貼り付け、親への呼び出しをシミュレートする必要があります。

jQuery.validator.setDefaults({
    unhighlight: function (element, errorClass, validClass) {
        // base.unhighlight(element, errorClass, validClass) // <-- desired functionality
    ...

どうすればこれを行うことができますか?どうもありがとう -

4

2 に答える 2

3

もちろん、あなたが提案したように、これを行う他の方法は、ソースからデフォルトをコピーすることです。他の回答で述べたように、setDefaults を 1 回だけ呼び出す必要があるため、これはよりスマートなアプローチである可能性があります。

あなたが jQuery/JS 全般にどれほど精通しているかはわかりません。しかし通常、バリデーターを呼び出すたびにオプションを渡します。

したがって、フォームが 3 つある場合は、次のことができます。

$('#form1').validate({
   unhighlight: function(el, error, valid){ el.append('<div class="errormsg">Required for Form1</div>'); }
});

$('#form2').validate({
   unhighlight: function(el, error, valid){ $(el).append('<div class="errormsg">Required for Form2</div>'); }
});

$('#form3').validate({
   unhighlight: function(el, error, valid){ $(el).append('<div class="errormsg">Required for Form3</div>'); }
});

しかし、ハイライト方法をグローバルに変更したい場合は、次のようにできます。

jQuery.validator.setDefaults({
   highlight: function(el, error, valid){ $(el).siblings('.errormsg').remove; }
});

したがって、実際には setDefaults メソッドを 1 回だけ呼び出す必要があります。確かに、一度コピーして貼り付けるのはそれほど難しいことではありません。

于 2012-07-14T00:05:06.083 に答える
1

これが構造化されている方法では、プラグインを変更せずにできる最善の方法です。これは、setDefault メソッドを呼び出すと、プラグイン自体のデフォルトのコピーが上書きされるためです。これを回避するのは難しいことがわかりましたが、デフォルト オブジェクトを & で分離し、そのコピーを作成して参照できるようにすることで修正しました。実装全体で setDefaults を 1 回だけ呼び出す必要があるため、プラグイン ソースから単純なロジックを正直にコピーする方が、この時点でより適切なルートになる可能性があります。

ここここで私のコミットを参照してください。必要に応じて自由にフォークしてください。

基本的に、呼び出している関数には追加のパラメーター _orig (または任意のもの) があります。についても同様ですhighlight

unhighlight: function (el, error, valid, _orig) {
  _orig(el, error, valid); // runs directly from the defaults.
  // do other stuff.
}

ここにファイルがあります

編集:うわー。そのプラグインの範囲は非常に高度です。ソリューションを実装するのに思ったよりも時間がかかりました。これが実際のデモです: http://jsfiddle.net/fjMFk/24/

于 2012-07-13T20:46:07.137 に答える