2

現在、モバイル html5 プロジェクトに取り組んでいます。このjQuery 検証プラグインを使用して、フォームでログイン画面を検証しています。また、単一ページ テンプレートで jQuery Mobile を使用しています (別の html ファイルにページがありますが、ページを変更すると、JQM がファイルを読み取り、新しいページ コンテンツを DOM に挿入します)。アプリでページが変更されるたびに、JQM にページを再度リロードするように強制する:

$.mobile.changePage("pageurl", {reloadPage: true});


最初のページは、ユーザー名とパスワードの単純なフォームを含むログイン画面です。最初のショットではすべてがうまくいきます。送信ボタンが押され、いくつかのフィールドが空である場合、検証プラグインは文句を言います。すべてのフィールドが OK で送信が押された場合、WS に対していくつかの ajax 呼び出しを行い、データを DB に保存すると、次のページが表示されます。

これは、ログイン画面のコードです。

    $(document).on("pageinit", "#login_screen", function() {  
        //This event fires every time we show this JQM "page".

        $("#id_index_form").validate({
            submitHandler : function(form) {
                user = form.user.value;
                password = form.psw.value;
                login(); 
            }
        });
    });

    function login(){
        //Calls the login WS  (ommited)

        //if login went ok, inject next page in DOM using ajax
        $.mobile.changePage("nextpage.html", {reloadPage: true});
    }

重要なことの 1 つは、フォーム組み込みメカニズムを使用できないため、login代わりにカスタム関数が呼び出されることです。

次の画面で、ユーザーがログインに戻ると、ページを再度変更します。

$.mobile.changePage("login.html", {reloadPage: true});

そして今、検証プラグインは機能しなくなりました。検証されず、送信が押されるとフォームがクリアされ、何も起こりません。ただし、mobileinit イベントは期待どおりに再び発生しました。コンソールにエラーはありません。

足りないものはありますか?プラグインを「再起動」するにはどうすればよいですか? たぶん、前の通話が終了しなかったとまだ考えているのでしょうか?

前もって感謝します。


更新:
縮小されていないプラグイン js ファイルをデバッグしていますが、validate呼び出しで行う初期化に問題があるようです。正常に完了する最初の呼び出しで、プラグインはフォームにバインドするバリデーターを作成し、バリデーターをキャッシュします。2 番目の呼び出しでは、新しいバリデーターを新しいフォームにバインドする必要があり、代わりに古いバリデーター (古いフォームにバインドされた) が返されます。

4

1 に答える 1

1

解決済み:

何が起こっていたのか: わかりません。私が知っているのは、このプラグインvalidateが呼び出されたときにフォームにバインドし、フォームが DOM にある限りフォームにバインドし続けることだけです。また、バリデーターをキャッシュするため、同じフォームに対する後続の呼び出しvalidateはまったく同じバリデーターを返します。

私がやったこと: 次のページに移動する前に、DOM からフォームを削除します。

于 2013-03-21T15:50:18.527 に答える