0

JQuery Mobile アコーディオン リストを使用しています

pageshow(リスナーで)を使用して、アイテムの1つの拡張をリッスンしています

$("#myListSection").bind("expand",function(){})

私のアプリでは、ページが前後に切り替わります。複数の「展開」サブスクリプションが作成されるという問題があったため、再度リストに切り替えると、セクションを展開したときに複数の関数が呼び出されていました。unbindそのため、ページを離れるときにメソッドを使用してリスナーを破棄したいと考えています。

私が抱えている問題は、イベントをアンバインドしてから再バインドしようとするときです。

$("#myListSection").unbind("expand")
$("#myListSection").bind("expand")

基本的に、発生する展開イベントは 1 つだけです (これは良いことです) が、リスト セクションは展開されません。

JS フィドルの例: http://jsfiddle.net/6txWy/1658/

4

1 に答える 1

1

単純。次のように、実行する関数を個別の関数として設定します。

function expand() {..}
function collapse() {..}

次に、イベント ハンドラーは次のようにする必要があります。

$('#my-collaspible').bind({
     'expand': expand,
     'collapse': collapse
});

このような関数を渡すことを好みます。これにより、コードがクリーンで理解しやすくなります。それでは、本編に入りましょう。unbind折りたたみ可能なものに関連付けられているすべての機能を使用して削除する代わりに、unbind以前にバインドした関数を次のように使用します。

$(this).unbind('expand', expand);

2 番目expandは、渡した anon 関数です。後で、必要に応じて、このようcollapsibleにバインドすることができますexpand()。(また)

$(this).bind('expand', expand);

this(ここでは折りたたみ可能であると仮定します)

デモ :http://jsfiddle.net/hungerpain/6txWy/1661/

unbind補足 - なぜ jQueryは使用時に折りたたみ可能オブジェクトに関連付けられたすべてのイベント データを削除するのですか? 折りたたみ可能オブジェクトはネイティブではありませんか? それらは、toggleClass を使用して jQM によって作成されます。これは、それ自体が関数内にあり、clickイベント ハンドラーとしてアタッチされています。(完全に機能するわけではありませんが、要点はわかります)したがって、呼び出すだけですべてunbindが破壊されます。

お役に立てれば :)

PS最新バージョンの jQuery & jQuery mobile の使用を検討してください。onという名前のブロックに、多くの点ではるかに優れた新しい子供がいbindます。

于 2013-06-13T17:44:51.580 に答える