なぜCeeboxは重複するiframeやリンクをトリガーしますか?

私はフォームをajax呼び出しをceeboxをトリガーする関数に提出するdrupalサイトで作業しています。 Drupal PHP関数のコードは次のとおりです:

    $commands = array();
    $html = '';
//attempt to remove already existing ceebox generated elements
    $commands[] = ajax_command_replace('#subscribe','');
    $commands[] = ajax_command_replace('#cee_iframeContent', '');
    $commands[] = ajax_command_replace('#cee_title', '');
    $commands[] = ajax_command_append('body', $html);
    $commands[] = ajax_command_invoke(NULL, 'subscribeOpen', array('subscribe'));
    return array('#type' => 'ajax', '#commands'=>$commands);

drupal関数が呼び出すJavascript:

(function($) {
        $.fn.subscribeOpen = function(data) {

            $('#subscribe').ceebox().trigger('click');


        };



})(jQuery);

これはすべて期待どおりに動作します。すなわち、iframe内のceeboxを含む/ subscribeページのコンテンツを表示します。私がceeboxのクローズリンクをクリックするか閉じるためにバックグラウンドをクリックすると、初めてシャットダウンされます。その後、サブリンク・リンクをクリックしてdrupal ajaxとceebox呼び出しをトリガーすると、追加のクローズ・リンク、追加の「Item of 1」タイトルと余分なiFrameウィンドウが追加されます。これは、閉じるをクリックするたびに繰り返され、その後、無限追加関数をトリガします。 #subscribe要素にunbind( '#ceebox')を追加しようとしましたが、jQueryのユニークな()メソッドは利用できません。誰かがこれらの重複したceeboxをアンバインド/削除する方法について光を当てることができますか?

1

1 答え

私はこれをjquery.ceebox.jsファイルを見て調べ、intialise関数がlive()メソッドを実行していることを発見しました。

これは、要素上で一度だけ呼び出されるべきであるように、あらゆる種類のすばらしい問題を引き起こします。上記のコードは、ceeboxをトリガするときにlive()を複数回呼び出すため、jquery.ceebox.jsの374行目を置き換えることをお勧めします。

$(elem).live("click", function(e){

読む:

$(elem).bind("click", function(e){
2
追加された
+1大きな努力。いい答えです。
追加された 著者 AlphaMale,
仕事のおかげで、私は多くの時間の地獄を救った。
追加された 著者 Celos,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript