7

奇妙な問題が発生しています。ajax を介してコンテンツを取得し、Fancybox (2) を特定の要素にバインドするコードがあります。問題は、このページを「更新」するときに、Fancybox を再度プルしてバインドする同じ関数を呼び出すことです。

Fancybox 2 に変更するまでの私の通常のアプローチは、要素のバインドを解除して再バインドすることです。ただし、これは FB2 では機能していないようです。

私は次のことを試しました:

$('.tool_button').unbind('click.fb');
$('.tool_button').unbind('click');
$('.tool_button').unbind();
$('.tool_button').off('click.fb');
$('.tool_button').off('click');
$('.tool_button').off();

ソースファイルで次のことがわかりました。

// Unbind the keyboard / clicking actions
    unbindEvents: function () {
        if (F.wrap && isQuery(F.wrap)) {
            F.wrap.unbind('.fb');
        }

        D.unbind('.fb');
        W.unbind('.fb');
    }

誰かがここで助けることができれば、それは大歓迎です。

前もって感謝します。ニック

4

4 に答える 4

13

属性を含めると、live:falseを使用して要素からハンドラーを削除できるようになります.off()

click.fb-startソースコードを調べた後、特定のイベントをターゲットにしたい場合は、特定のイベントがであることがわかりました。

例えば:

$(".fancybox").attr('rel', 'gallery').fancybox({live: false});
//remove click handler
$('.fancybox').off("click.fb-start");

参考までに、ドキュメントには次のように記載されていますlive

live: trueに設定されている場合、fancyBoxは「live」を使用してクリックイベントを評価します。現在のコレクションにのみ適用する必要がある場合、たとえば-$( "#page").children()。filter('a')。eq(0).fancybox()のようなものを使用する場合は、「false」に設定します。 ;

jsFiddle

これがjsFiddleのデモンストレーションです

http://jsfiddle.net/DigitalBiscuits/DBvt7/211/

于 2012-12-17T02:15:38.250 に答える
6

これが古いスレッドであることは知っていますが、OAC Designs が完全に正しいことを確認したかっただけです。.fancyboxリンクのバインド解除は、liveパラメーターが に設定されている場合にのみ機能しますfalse

ただし、次のようにして、パラメーターに関係なく、DOM レベルで Fancybox を破棄することもできます。live

$(document).unbind("click.fb-start");

または

$(document).off("click.fb-start");


JSFiddle

このJSFiddleを参考にしてください。

于 2014-12-06T14:55:34.303 に答える