2012-09-13 9 views
7

To jest moje pytanie, a oto mój przykładowy kod.Czy wyciszanie zdarzeń Fancybox Click?

HTML:

<a class="fancybox" rel="group" href="img1.jpg"> <img src="img1_thumb.jpg"> </a> 
<a class="fancybox" rel="group" href="img2.jpg"> <img src="img2_thumb.jpg"> </a> 

JS:

var header = '<img id="w" src="logo.gif">'; 

$('.fancybox').fancybox({ 
    afterLoad: function() { 
     this.wrap.prepend(header); 
    }, // afterLoad 
}); //fancybox 

$('#w').click(function() {console.log('clicked');}); 

Po kliknięciu na miniaturę, aby uruchomić fancybox, afterLoad spadnie w nagłówku, ale po kliknięciu na zdjęcie i oglądać konsolę nic nie dostajesz.

Myśli? Próbuję użyć metody FancyBox: $.fancybox.close(), ale jeśli nie mogę uruchomić zdarzenia kliknięcia, jestem zmuszony do użycia go w trybie inline, co wolałbym nie robić ze względu na niestosowanie wbudowanego JS.

Odpowiedz

2

Powinieneś użyć .on() lub odpowiednika do dynamicznego wiązania lub powiązania w wywołaniu zwrotnym afterLoad. Nie ma to nic wspólnego z Fancybox: wiążesz za pomocą selektora jQuery, który pasuje do czegoś, co jeszcze nie istnieje w DOM. Alternatywnie możesz spróbować powiązać bezpośrednio z elementem w pamięci, ale powinieneś poczuć się komfortowo, pracując najpierw z wiązaniem DOM.

+0

Czy mogę umieścić coś w stylu '$ ('# w') na (" kliknij ", function() {$. Fancybox.close()})' w funkcji 'afterLoad' po przygotowaniu nagłówka? –

+0

To się udało! Dzięki wielkie. –

+0

Pomyślałem, że dodam, że funkcja '$ .fancybox.close()' w wywołaniu 'afterLoad' nie była optymalna. Po przewinięciu do następnego obrazu "nowy" nagłówek nie obsługuje zdarzenia. Naprawiłem to, przesuwając moduł obsługi kliknięcia do wywołania zwrotnego 'afterShow'. –

Powiązane problemy