2012-03-19 6 views
1

は私がpanelTrans結合このイベントの中から、私の機能を発射しようとしています:無限ループを作成せずにイベントトリガ関数をイベントハンドラから起動する方法はありますか?

問題がある
$(document).on("pagebeforechange", function(e, data) {   
    console.log("fired"); 
    // cond 
    if (data.options.pageContainer != $.mobile.pageContainer) { 

     if (self.options.$infinity != "block") { 
      // set a blocker to avoid infinite loop 
      self.options.$infinity = "block" 

      // stop JQM 
      e.preventDefault();  
      e.stopPropagation(); 

      // fire panel transition 
      self.panelTrans(e, data); 
      } 
     } 
    }); 

は、panelTrans機能は別のpagebeforechangeイベントをトリガchangePageを発射するので、私はinifinteを作成していますループ。私はinifiteループオプションでこれをブロックしようとしています。しかし、これはまだ十分速くブロックしていないようですが、私はまだいくつかの "反復/ループ" =コンソールが3-5の "ロギング"を記録しています。 if-statementの外側にpreventDefaultを移動すると、すべての動作が妨げられ、これも動作しません。

質問:
これを処理するためのより良い方法はありますか? changePageオプションを上書きしてJquery Mobileが実行されるように変更されたchangePageを起動するように移行する前に、changePageをインターセプトする必要があります。

ありがとうございました!

+0

なぜchangePageイベントを発生させるのですか?機能の実行(オプションの変更など)が完了すると、イベントはとにかく起動されますか? – ManseUK

+0

@ManseUK:最初はこれを試しましたが、panelTransがオプションを変更するまでにJQMページチェンジが既に開始されていましたので、新しいものを起動する必要があります。 – frequent

答えて

0

selfとは何ですか。panelTransは何ですか?

もちろん、条件付きではないため、複数の「解雇」ロギングが発生することがあります。特に、ループがブロックされても、新しいイベントが記録されます。

代わりにpanelTrans()の実行をログに記録しましたか?

+0

申し訳ありませんが、あまりにも多くのコードを削除します。 self = this、self.pluginFunction1、self.pluginFunction2 ...を使用してプラグイン関数を呼び出していますPanelTransはデフォルトのJquery Mobile changePageオプション(および他のもの)を変更し、新しいchangePageを起動します。 panelTransの実行と良いポインタ、私はそれを試してみましょう。 – frequent

0

data.toPageにタイプをチェックし、toPageが文字列の場合のみイベントをキャンセルする必要があります。

$.mobile.changePage()への呼び出しは、ページオブジェクトである必要があります。

これは別の質問の例です。 http://jsfiddle.net/kiliman/zMnUM/

$(document).bind('pagebeforechange', function(e, data) { 
    var to = data.toPage; 

    if (typeof to === 'string') { 
     var u = $.mobile.path.parseUrl(to); 
     to = u.hash || '#' + u.pathname; 

     e.preventDefault(); 
     e.stopPropagation(); 

     // call $.mobileChangePage() here, 
     // make sure it's a page object like $('#page') 

    } 
}); 
+0

ああ、これはグッズを鳴らします。それを確認する。今のところThx! – frequent

関連する問題