2012-09-13 2 views
7

Das ist meine Frage, und hier ist mein Beispielcode.Deaktiviert Fancybox Click Events?

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');}); 

Wenn Sie ein Bild klicken FancyBox zu starten, afterLoad wird im Header fallen, aber wenn Sie das Bild klicken und die Konsole sehen du bekommst nichts.

Gedanken? Ich versuche, die $.fancybox.close() Methode von FancyBox zu verwenden, aber wenn ich das Klickereignis nicht auslösen kann, bin ich gezwungen, es inline zu verwenden, was ich lieber nicht tun würde, um JS inline nicht zu verwenden.

Antwort

2

Sie sollten entweder .on() oder gleichwertig verwenden, um dynamisch zu binden oder im afterLoad Callback zu binden. Es hat nichts mit Fancybox zu tun: Sie binden mit einem jQuery-Selektor, der mit etwas übereinstimmt, das im DOM noch nicht existiert. Alternativ könnten Sie versuchen, direkt an das Element im Speicher zu binden, aber Sie sollten zuerst mit der DOM-Bindung arbeiten.

+0

Also würde ich etwas wie '$ ('# w') auf ('click', function() {$. Fancybox.close()})' in der 'afterLoad' -Funktion nach dem Voranstellen der Kopfzeile? –

+0

Das hat es geschafft! Vielen Dank. –

+0

Ich dachte, ich würde diese Bindung hinzufügen, die Funktion '$ .fancybox.close()' im 'afterLoad' Callback war nicht optimal. Wenn Sie zum nächsten Bild blättern, wird das Ereignis nicht von der neuen Kopfzeile behandelt. Ich habe es behoben, indem ich den Click-Handler zu einem 'afterShow' Callback bewegte. –