1

私はiPhoneアプリケーションを作成するためにphonegapでjQuerymobileを使用しています。データベースからデータを取得し、ページが読み込まれたときにページのフィールドに入力するために、URLで動的IDを渡します。

$.mobile.changePage( "child-form-page.html?id=1");

初めて正常に動作し、データロールdividlive関数が呼び出されます

$('#childForm').live('pagecreate',function(event){ 
  //Fetch data and fill fields based on ID i get in url
});

しかし、フォームを送信して同じページを使用して次のフォームに移動すると、$.mobile.changePage( "child-form-page.html?id=2");トリガー$('#childForm').live機能が2回実行され、データが失われます。

4

3 に答える 3

1

セクションに<script>タグを設定すると<header>、イベントは最初のページの読み込み時にのみバインドされます。<script>タグの最初の子としてタグがある場合<div role="page">、何度もバインドされます。

このページの下部にある詳細: http://jquerymobile.com/demos/1.2.0/docs/pages/page-anatomy.html

また、 http://jquerymobile.com/demos/1.2.0/docs/api/events.htmlを使用していないことを確認してください。$(document).ready();

于 2013-02-08T23:14:50.210 に答える
1

あなたはそれ以上のコードを提供してくれなかったので、私はあなたの問題の修正しか提供できません。jQuery Mobile の動作の性質により、イベントをバインドする際に問題が発生する可能性があります。jQuery イベント バインディングには、複数のイベント (クリック イベントなどの同じイベント) が 1 つの要素にバインドされるのを防ぐチェックがありません。

これはいくつかの方法で防ぐことができ、それらすべてを列挙しますが、jQueryとは異なり、jQuery Mobileページのイベントバインディングは複数のバインディングを防止するため、問題は複数のイベントバインディングに関連していないと思います。その場合、解決策が見つかります私の答えの一番下にあります。

解決策 1:

バインドする前にイベントを削除します。

$('#index').live('pagebeforeshow',function(e,data){    
    $('#test-button').die().live('click', function(e) {
        alert('Button click');
    });    
});

オブジェクトに異なるイベントがバインドされている場合:

$('#index').live('pagebeforeshow',function(e,data){    
    $('#test-button').die('click').live('click', function(e) {
        alert('Button click');
    });    
});

解決策 2:

次のように、jQuery フィルター セレクターを使用します。

$('#carousel div:Event(!click)').each(function(){
    //If click is not bind to #carousel div do something
});

イベント フィルターは公式の jQuery フレームワークの一部ではないため、http: //www.codenothing.com/archives/2009/event-filter/で見つけることができます。

簡単に言えば、速度が主な関心事である場合、ソリューション 2 はソリューション 1 よりもはるかに優れています。

解決策 3:

新しいもの、おそらくそれらすべての中で最も簡単です。

$(document).on('pagebeforeshow', '#page', function(event){  
    if(event.handled !== true) // This will prevent event triggering more then once
    {
        // Some code
        event.handled = true;
    }
    return false;                
});

このソリューションの sholsinger への Tnx: http://sholsinger.com/archive/2011/08/prevent-jquery-live-handlers-from-firing-multiple-times/

pageChange イベントの癖 - 2 回トリガーする

前述の問題とは関係なく、pagechange イベントが 2 回トリガーされることがあります。

pagebeforechange イベントが 2 回発生する理由は、toPage が jQuery 拡張 DOM オブジェクトでない場合に、changePage で再帰呼び出しが行われるためです。開発者はイベント内で toPage を変更できるため、この再帰は危険です。開発者が一貫して toPage を文字列に設定すると、pagebeforechange イベント ハンドラー内で、オブジェクトであるかどうかに関係なく、無限再帰ループが発生します。pageload イベントは、新しいページをデータ オブジェクトの page プロパティとして渡します (これはドキュメントに追加する必要がありますが、現在はリストされていません)。したがって、pageload イベントを使用して、読み込まれたページにアクセスできます。

簡単に言えば、これは、pageChange を介して追加のパラメーターを送信しているために発生しています。

例:

<a data-role="button" data-icon="arrow-r" data-iconpos="right" href="#care-plan-view?id=9e273f31-2672-47fd-9baa-6c35f093a800&amp;name=Sat"><h3>Sat</h3></a>

この問題を解決するには、ページ イベントの遷移順序の章にリストされている任意のページ イベントを使用します(これは、jQuery Mobile ページ イベント バインディングに関する他の回答/記事です)。

于 2013-02-09T16:32:19.820 に答える