現在、モバイル 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 番目の呼び出しでは、新しいバリデーターを新しいフォームにバインドする必要があり、代わりに古いバリデーター (古いフォームにバインドされた) が返されます。