jquery.validateとjquery.AVgrundの併用による検証エラー

2788 ワード

ERROR:
jquery.validateはjQueryベースのフォーム検証プラグインです.http://jqueryvalidation.org/ jquery.avgrundはポップアップウィンドウプラグインで、効果は悪くなく、使用は簡単です.https://github.com/voronianski/jquery.avgrund.js
jqueryを使用します.AVgrundポップアップフォーム+jqueryを使用する.validate検証フォーム1.14.0と併用してエラーが発生し、最初にポップアップを開いたときにvalidateが正常に動作し、ポップアップを閉じてからポップアップを開いた後、検証が失効しました.
FIND
1、分析jquery.validate,30行程度のソースコードは以下の通りであるため,this[0]オブジェクトが格納するvalidator属性が重要であり,validateの機能を実現している可能性があると推測する.jquery.validate 与 jquery.avgrund合用导致的验证出错_第1张图片 console.log()は、thisがjqueryオブジェクトであることを発見しました.つまりvalidateを実行するjquery要素です.ここでvalidateを実行するフォームセレクタです.this[0]は、変換されたフォームdomオブジェクトを表します(以下、そのオブジェクトを[form]で表します).
2、分析jquery.avgrundソースコードは、問題が閉じた後に再び開くことと関係があるため、私たちは同時にjquery.AVgrundソースコードにおけるactiveメソッドの先頭とdeactiveメソッドの先頭にconsoleを加える.logコードは、前述の[form]と$を出力する.data([form],“validator”)を比較します.
最終的にコード123行にロック、以下のコード実行後$.data([form],“validator”)はundefinedに変わります.
/* jquery.avgrund 123    */
setTimeout(function () {
    $('.avgrund-popin').remove();
}, 500);

HANDLE
1、ではvalidatorを手動で定義し、remove()コードの実行後に値を再割り当てします.
var validator = $.data([form],"validator")
/* 123    */
setTimeout(function () {
    $('.avgrund-popin').remove();
}, 500);

$.data([form],"validator",validator )

それでも$data([form],“validator”)の値は確かにundefinedではありません.しかし、validateメソッドは依然として無効であり、validate効果の実行はこの属性に依存しない可能性があります.同じ方法を[form]要素全体に適用しても無効です.
2、なぜremove()メソッドがdom要素の属性を変えるのでしょうか.この疑問を持ってremove()の説明を見に行きましたが、
jquery.validate 与 jquery.avgrund合用导致的验证出错_第2张图片
これにより、removeは要素を削除するだけでなく、追加のデータとイベント、すなわちvalidateが有効になる根本を削除することがわかります.123行コードのremove()をdetach()に変更し、問題を解決します.