2012-03-15 32 views
5

私はFancyboxのコンテンツ内のリンクからFancyboxのインスタンスを閉じようとしています。私はthis questionで推奨されているようにparent.jQuery.fancybox.close();を使用しています。それは初めてではありませんが、その後は動作しません。誰でも修正案を提案できますか?parent.jQuery.fancybox.close(); Fancyboxの中から一度だけFancyboxを閉じます

私はこれをページに自分のコンテンツのdivを隠しています:

#content { 
    display: none; 
} 

そして、ここではFancyboxを閉じるためのリンクが含まれているコンテンツのdiv、とFancyboxを起動するリンク、です。

<a href="#" id="launch">Launch</a> 

<div id="content"> 
    <p>Nunc porttitor pellentesque magna a pulvinar. Vestibulum id diam lectus. Praesent vel dictum est.</p> 

    <a href="#" id="close">Close</a> 
</div> 

これは私のJSです。私はFancyboxを開く際に、イベントハンドラをクローズリンクに追加しようとしましたが、それは助けになりませんでした。

$(document).ready(function(){ 
    $('#launch').fancybox({ 
     'width': 300, 
     'content': $('#content'), 
     'onClosed':function() { 
      $("#content").hide(); 
     }, 
     'onStart':function() { 
      $("#content").show(); 
      $('#close').on('click', function(){ 
       //console.log($(this).parent); 
       parent.jQuery.fancybox.close(); 
      }) 
     }, 
     'onCleanup':function() { 
      $("#content").unwrap(); 
     } 
    }); 
}) 

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

+0

だから '.fancybox()'関数の '$( '#close')。on()'関数_outside_を置くとどうなりますか? – Sparky

+0

同じことSparky - ライトボックスは初めて起動するときに閉じますが、その後は閉じません。 –

+0

私はあなたがしようとしていることを完全に理解していないと思います。私はfancyBoxを使用し、あなたのような問題は一度もありませんでした。 [the fancyBox documentation](http://fancyapps.com/fancybox/#docs)によると、私は 'onClosed'、' onStart'または 'onCleanup'メソッドを見つけることさえできません。 – Sparky

答えて

7

parent.jQuery.fancybox.close();は、fancyboxで開かれたiframeから呼び出される必要があります。あなたの場合はinlineのコンテンツを開いているので、接頭辞parentは必要ありません。また、インラインコンテンツに正しい構造を提供し、そこからclosing関数を呼び出す必要があります。

だからあなたのインラインコンテンツがあるため#contentが隠しdivの内側にすでにあるので、あなたはこのCSSに

#content { 
    display: none; 
} 

を必要としません上記の

<div style="display: none;"> 
<div id="content"> 
    <p>Nunc porttitor pellentesque magna a pulvinar. Vestibulum id diam lectus. Praesent vel dictum est.</p> 
    <a href="javascript:;" id="close">Close</a> 
</div> 
</div> 

のようになります。

$(document).ready(function(){ 
$('#close').on('click', function(){ 
    //console.log($(this).parent); 
    $.fancybox.close(); 
}); //on 
/* 
// you could also do 
$('#close').click(function(){ 
$.fancybox.close(); 
}); 
*/ 
$('#launch').click(function(){ 
    $.fancybox({ 
    'width': 300, 
    'href': '#content', 
    'onCleanup':function() { 
    $("#content").unwrap(); 
    } 
    });//fancybox 
}); // click 
}); //ready 

これはFancyboxのv1.3.x用で、バージョンはあなたに思える:

は、あなたのクロージング機能は...また、以下fancyboxスクリプトの変更に気づくfancyboxスクリプトから分離することができ、使用している。また、 .on()メソッドを動作させる場合は、jQuery v1.7.xを使用する必要があります。

+0

ありがとうJFK、完璧に動作します! –

0
try{ 
     parent.jQuery.fancybox.close(); 
    }catch(err){ 
     parent.$('#fancybox-overlay').hide(); 
     parent.$('#fancybox-wrap').hide(); 
    } 

!!!オンサポートされていません!!!

関連する問題