2012-04-02 12 views
2

Das mag super einfach sein - aber ich habe Mühe herauszufinden, was vor sich geht.Jquery click event - benötigt zwei Klicks zum feuern

Auf der JS Fiddle: http://jsfiddle.net/3hHAX/

Es gibt zwei Links Ausgang 'Open Video modal'.

Wie der Linktext vorschlägt, sollten diese zwei Links ein Modell-Popup mit dem enthaltenen Youtube-Video öffnen.

Dies wird mit der Bibliothek von pretty: http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/

Aus irgendeinem Grund das Click-Ereignis auf den ersten Klick nicht ausgelöst. Aber funktioniert auf Sekunde.

(Haben Sie das CSS nicht enthalten, so sieht nicht sehr modal aus, aber Sie werden sehen, dass der Inhalt unten mindestens für Zwecke der Demo geladen wird).

Kann jemand vorschlagen, was schief läuft?

Danke,

Steve

Antwort

1

Danke Jungs,

Beide Antworten hat mir geholfen, es letztlich zu lösen.

End-Lösung in der aktualisierten JSFiddle:

http://jsfiddle.net/3hHAX/6/

Scheint pretty legt es auf Click-Ereignis selbst ist, und nur auf diese dom Elemente benötigt Anwendung.

Danke, Steve

4

Auslöser des Click-Ereignis, nachdem Sie es zu initialisieren, und es nur einmal initialisiert erlauben werden.

(function($) {  
    $(".watch-this a, .field-name-field-embed-code a").live('click',function(){ 
     if (!$(this).is(".pPhoto")) { 
      $(this).prettyPhoto({ 
       social_tools: '' 
      }).addClass("pPhoto").click();  
     } 
     return false;  
    }); 
})(jQuery); 

Demo:http://jsfiddle.net/3hHAX/3/

Bearbeiten zur Klarstellung:
Dies ist eine sehr häufige Art und Weise ein Plugin auf dynamische Elemente zu initialisieren. Wie bereits erwähnt, ist es besser, dom ready zu initialisieren, wenn Ihre Elemente nicht dynamisch sind.

Hinweis:
.live abgeschrieben wird, sollen Sie wirklich .on

(function($) {  
    $(document).on("click",".watch-this a, .field-name-field-embed-code a",function(){ 
     if (!$(this).is(".pPhoto")) { 
      $(this).prettyPhoto({ 
       social_tools: '' 
      }).addClass("pPhoto").click();  
     } 
     return false;  
    }); 
})(jQuery); 
0
  • Zunächst einmal verwenden werden, nie die Live-Methode in Jquery zu verwenden, außer in Situationen, in denen der dom wirklich aus ist deiner Kontrolle. Zumindest sollten Sie die Delegate-Funktion verwenden, da die Live-Funktion viel Verlangsamung und eine Menge Ärger verursachen wird (obwohl es dieses Mal nicht fehlerhaft war).
  • Zweitens, das Click-Ereignis wird ausgelöst, wie Sie können siehe here, aber die prettyPhotos-Komponente funktioniert nicht das erste Mal aus Gründen, die mir unbekannt sind, aber wie Sie in der vorherigen jsfiddle Link sehen funktioniert arbeiten mit einer Warnung das erste Mal Sie klicken, so dass es klingt ich als ein Fehler im PrettyFotos-Skript (welches Kevin B scheinbar hackisch löst, indem er ein zweites Klick-Ereignis auslöst).
+0

„.auf“ verwendet wird nun statt „.live“ und wenn das Element dynamisch dann „.auf“ geladen wird verwenden, der ‚Dom‘ soll nie aus Ihrer Kontrolle sein. Nicht sicher, was Sie mit dieser Aussage meinten. –