2012-03-09 20 views
4

JSのスニペットは、ページが完全にロードされた後、JQMがUIのすべての変更(リストビュー、ボタンなど)を処理した後に一度だけ実行しようとしています。私はそれがそのページでのみ実行され、その後のページでは実行されません。私が最初に試した何 jQuery Mobile - pageshowイベントを1回だけ実行する

は、この関数は、現在のページのdivに取り付けられており、それ以降のページが表示されるたびに実行されます問題があるpageshowの

<script> 
$('[data-role=page]').live("pageshow", function() { 
    alert("Ready!"); 
}); 
</script> 

ました。しかし、私はこれを一度だけ実行して、そのJSスニペットが含まれているページのみにします。

実際に機能を追加せずに、pageshowイベントを聴く方法はありますか?

私はそれを行うことができた唯一の方法は、次のように結合し、バインド解除によってだった:

<script> 
$('[data-role=page]').bind("pageshow.test", testfun); 

function testfun() { 
    alert("Ready!"); 
    $('[data-role=page]').unbind("pageshow.test", testfun); 
} 
</script> 

しかし、そうするよりエレガントな方法は何ですか?

+1

1ページだけにバインドするには、 'data-role'属性が' page'に設定されているすべての要素を選択する '[data-role = page]'ではなくセレクタでIDを使用します: '$( ' my-page ')。bind(' pageinit '、...)。 – Jasper

答えて

7

jQueryには、一度だけ実行されるイベントハンドラをバインドする機能があります。onereferenceを確認してください。

+0

ありがとう、私は1つの機能を認識していませんでした。 – Steve

4

pageinitイベントは、jQuery Mobileフレームワークがウィジェットを初期化した直後にページごとに1回発生します。私はそれがあなたが探しているものかもしれないと思う。初期化が発生した後に、初期化されているページでトリガ

pageinit

。 は、ページが直接ロードされているか、 コンテンツがAjaxナビゲーション システムの一部として別のページにプルされているかどうかに関係なく、DOM ready()の代わりにこのイベントにバインドすることをお勧めします。

出典:http://jquerymobile.com/demos/1.1.0-rc.1/docs/api/events.html

あなたが変更したいページのみを選択し、残りの部分を特定のページに結合していないしたい場合は...ここでは例です:

<script> 
$(document).delegate('#my-page-id', 'pageinit', function() { 
    alert("PageInit!"); 
}); 
</script> 
関連する問題