0

jQueryページにログインフォームがあります。コードは十分に単純です:

<form method="post">
    <div data-role="fieldcontain">
        .... Form here
    </div>
</form>

ただし、次のフォームが送信されると、JQMはAjaxPOSTを介して次のページをロードします。

問題は、その新しいページのインラインJavasctiptが初期化されていないことです。$(document)要素などについては話していません。インライン化されたJavascriptブロック全体が初期化されていません。

ただし、追加すると

data-ajax="false"

フォームタグに、すべてが正常です。ページが正しく読み込まれ、初期化されます。

なぜこれが発生するのですか?また、ajaxがロードされたコンテンツでページの初期化をトリガーする方法はありますか?

FirefoxとAndroidWebviewクライアントの両方でこれを観察しました。

4

3 に答える 3

1

デフォルトのjQueryMobile実装(ajaxを利用)を使用してページをロードすると、最初のページ(<div data-role="page">)のスクリプトブロックのみがロードされます。

mobileinitを介してajaxの読み込みをオフにすることができます。これにより、ajaxの読み込みがグローバルに無効になります。または、ソースリンクを介して無効にすることができます。

$(document).on("mobileinit", function(){
    $.mobile.ajaxEnabled = false;
});

また

<a data-role="button" data-ajax="false"
    href="myPageWithItsOwnScriptBlock.html">Link</a>

ajaxローディングを引き続き使用する場合は、スクリプトブロックを「ページ」内に配置できます。<div>

<div data-role="page">
    <script src="myscript.js"></script>
    <div data-role="header">
    ....

詳細はこちら: http: //jquerymobile.com/demos/1.2.0/docs/pages/page-scripting.html

于 2013-01-27T15:47:43.993 に答える
1

あなたのケースでうまくいった理由data-ajax="false"は、ページ全体のリロードを強制し、偶然にページマークアップの機能強化をトリガーするためです。

これは、jQueryMobileのドキュメントの一部です。

Ajaxを介して読み込まれたモバイルページから複数の内部ページを含むページにリンクする場合は、リンクにrel="external"またはdata-ajax="false"を追加する必要があることに注意してください。これは、URL内のAjaxハッシュをクリアするために、ページ全体のリロードを実行するようにフレームワークに指示します。

あなたの場合、新しいページのコンテンツを強化したい場合は、これを使用してください。

$('#pageID').trigger('create');

または、ヘッダーとフッターにも変更を加えた場合は、次を使用します。

$('#pageID').trigger('pagecreate');

より控えめな表現が必要な場合は、私のブログ記事ご覧ください。ページコンテンツのマークアップの強化について詳しく説明していますか。そこには、上で述べた関数の例があります。こちらにもあります。

于 2013-01-27T19:27:17.593 に答える
0

インラインJSコードを次のようなものにカプセル化してみてください。

$(document).bind('pageinit', function(event) {
    // your inline code goes here
});
于 2013-01-27T11:26:16.037 に答える