1

私のFaceboxリクエストを、FaceboxWebサイトのドキュメントに記載されているとおりにバインドしています。

しかし、div.commentの1つをクリックした後、Faceboxリクエストは再び機能しません。

私が使用しているコードはすぐ下にあり、さらに下に私のエラーがあります。

$(document).ready(function() {
    $('.comment').bind('click', function() {
        $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
    }); 
});

エラー:

Uncaught TypeError: Object function (a,b){return new d.fn.init(a,b,g)} has no method 'facebox'
4

4 に答える 4

3

bind()をlive()に置き換えるというKimの提案が機能しなかった理由は、元のクリックイベントハンドラーが失われるという問題ではないためです。

エラーが示唆するように:

Uncaught TypeError: Object function (a,b){return new d.fn.init(a,b,g)} has no method 'facebox'

問題は、jQuery $オブジェクトが.facebox()メソッドを失うことです。フェイスボックスは、フェイスボックス内にjQueryをロードする場合を除いて、ウィンドウを正常に閉じたり開いたりすることができます。これを行うと、faceboxが既にロードされた後にjQueryが再初期化されるため、jQueryが再初期化されたときにfaceboxがjQuery$オブジェクトに自分自身を再追加する機会がありません。

フェイスボックスに読み込まれるコードからjQueryを削除することで、この問題を解決しました。jQueryがすでにメインページにロードされている場合、それは環境内にあり、フェイスボックスコード内に再度ロードする必要はありません。これは、メインページとフェイスボックス内のコードの両方でjQueryに依存している場合にのみ問題になります。フェイスボックス内にjQueryを再度ロードする必要がある場合は、jQuery.noConflict()を使用して別のインスタンスを使用できると思います。

于 2012-07-10T14:31:11.840 に答える
2

次のようなライブを使用してみましたか:

$(document).ready(function() {
    $('.comment').live('click', function() {
        $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
    }); 
});
于 2011-02-03T11:58:28.620 に答える
1
$(document).ready(function() {
    $('.comment').bind('click', function() {
        $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
$(".comment").unbind('click');
    }); 
});

それが機能することを願っています

于 2011-02-03T11:55:13.510 に答える
1

Facebox から Fancybox に切り替えることで問題を解決しました。一度使用した後にイベントのバインドを解除する Facebox のバグのようです。

于 2011-02-08T09:21:32.470 に答える