jQuery.auf('click') vor jQuery.klicken Sie auf?
Habe ich ein externes Skript, welches ich nicht ändern kann. Dieses Skript laden-Schaltfläche, und fügen Sie ein jQuery .klicken Sie auf... und das Ende mit "return false".
Muss ich trigger mein eigenen code auf diese klicken. Wenn ich das laden der Seite die nicht existiert, also muss ich verwenden .auf('click') zu binden "live". Aber es sieht aus wie die .auf('click') wird geladen "danach".klicken Sie auf, und als er "return false", meine .auf('click') ist nicht geladen.
Also die Frage ist... Wie kann ich trigger mein auf klicken Sie auf diese dynamisch geladen a#btn wich bereits eine .klicken Sie auf die Funktion false zurückgeben ?
Ist hier das fiddle :
http://jsfiddle.net/PLpqU/
Und hier ein code-Beispiel :
<div id="container"></div>
//I want this action to be executed on click, and the other too
//I can't use .click because on the "real" code, the a#btn is loaded after the page by another script
jQuery(document).on('click','a#btn',function(){
ga('send', 'event', { eventCategory: 'xxxx', eventAction: 'yyyy' });
}) ;
//http://www.xxxxxx.com/distant-script.js
//This one is binded in a script that i cannot edit :
//Just before it load a#btn on the page, and then bind .click on it
//as he return false, the other on('click') are not executed
jQuery('#container').append('<a id="btn" />') ;
jQuery('a#btn').click(function(){
//Some code stuff i need to be executed, but i can't manage
return false ;
}) ;
Wie Sie können, Ziel ist das auslösen eines Google-Analytics-event auf einem link-button geladen, durch ein entferntes script.
Ja, aber ich brauche es, um ausgeführt werden zu, ich kann nicht einfach lösen, ohne "rebinding". Gibt es eine Möglichkeit, binden Sie es nach der Bindung ? vorausgesetzt, ich bin nicht verantwortlich für das binden und seinen code ändern kann
Ich verstehe das, aber die Tatsache ist, es gibt keine einfache Problemumgehung für dieses. Haben Sie zu lösen oder zu ändern, die Veranstaltung, die das plugin ausgibt.
Rückblickend auf Ihrer Geige, es sieht aus wie Sie sind verbindlich, Ihre click-Ereignis, um das Dokument, nicht auf die
a#btn
element. Klicken Sie auf Ereignisse, die sich von der Unterseite der DOM an der Oberseite, also an Ereignisse gebunden, um das Dokument wird immer ausgelöst, nachdem Ereignisse gebunden, um DOM-Elemente. Können Sie binden direkt an a#btn
?Nein, ich kann nicht, weil ich es brauchen werden dynamisch gebunden, da die Schaltfläche nicht im DOM-laden auf
InformationsquelleAutor Pierre Granger | 2014-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass Sie konfrontiert sind mehrere Probleme, aber wichtiger wäre zu wissen, Wann das element gerendert wird, in den DOM, so dass Sie manipulieren Ereignisse Kollektion.
Einmal das element ist zugänglich, es ist ganz einfach zu lösen das plugin-Handler, binden, verkaufen und binden das plugin ist eines zu wissen, dass das jQuery-event-Auflistung zugegriffen werden kann: $._data(domEl, 'Veranstaltungen');
Hier ein Beispiel:
Wenn Sie nicht wollen, zu lösen, ich glaube, dass Sie können auch verwenden Sie die DOM level 0-Ereignis-Modell und do:
Wissen, zu wissen, wenn das element verfügbar ist, ist viel eher ein Problem, wenn das plugin macht dieses element asynchron und bieten keine Möglichkeit zu wissen, wenn der Prozess abgeschlossen ist.
Wenn Sie möchten, Unterstützung von alten Browsern, haben Sie keine andere Wahl, als entweder überschreiben Sie die plugin-code (vorausgesetzt, die betroffenen Methoden sind public) oder der Umfrage der DOM mit
setInterval
bis das element, das Sie suchen, ist Teil des DOM-und dann Sie können tun, was wir oben besprochen.Wenn Sie welche auf modernen Browsern, die Sie verwenden können, die
MutationObserver
Objekt zu hören, zu DOM-Veränderungen.Gut
setInterval
ist sicherlich weniger effizient, aber es ist ganz einfach. Sie können etwas tun, wievar timer = setInterval(function () { var $el = $('#el'); if ($el.length) { /*do what you need with the element*/ clearInterval(timer); } }, 100);
Bitte beachten Sie auch, dass Sie können verwenden Sie DOM-0-Ereignisse anstelle von verbindlich und unverbindlich, ich veränderte meine Antwort entsprechend.
Ich versuchte Ihre Methode und es funktioniert perfekt ! ziemlich genial 🙂 vielen Dank für Ihre Zeit, auf mein problem das ist wirklich perfekt 🙂
Tu veux dire que ton-handler n'était pas toujours invoqué quand l'élément était cliqué?
InformationsquelleAutor plalx
Können Sie lösen ein Ereignis und fügen Sie dann Ihre Funktion als event-handler.
http://api.jquery.com/unbind/
Überprüfen Sie dieses jsfiddle http://jsfiddle.net/Xm5MB/
Sie sagte, dass Ihre Verbindung dynamisch erstellt wird. Können Sie uns mehr details darüber? Wenn Sie den link dann nach dem einfügen in den DOM, können Sie lösen die "click" - Ereignis, und binden Sie Ihr handler.
+1, die eine alternative zu lösen ist
.off()
. "die jQuery 1.7, die .on() und .off () - Methoden sind bevorzugt zu befestigen und entfernen von event-Handlern auf die Elemente."Ich habe bearbeitet die Geige, um genauer zu sein auf die code : jsfiddle.net/XvyBN Das problem mit deinem code ist, dass ich müssen die ersten binden ausgelöst werden, kann ich gerade nicht, lösen Sie es ich will es, um ausgeführt werden zu
Wie werden Sie lösen ein Ereignis aus einem DOM-element an, wenn Sie nicht wissen, wenn das DOM-element existiert und zweitens, ist es ganz wichtig, zu binden das plugin event, so dass es ausführen können Sie das eigene Verhalten.
InformationsquelleAutor AbhinavRanjan
Eine Sache, die funktionieren könnte ist, binden Sie das click-Ereignis, das Sie wollen, um das Feuer zunächst auf ein child-element des Elements, dass die anderen click-Ereignis gebunden ist. Da das click-Ereignis wird die Blase aus der untersten Ebene der DOM zu den höchsten, es sollte Feuer-Handler gebunden, um Kinder vor diejenigen, die gebunden sind an Ihre Eltern.
Wenn Sie möchten, stoppen Sie das andere event aus abfeuern, können Sie entweder manuell verwenden
event.stopPropagation()
oder else returnfalse
von der Funktion, die Sie gebunden haben, um das Kind, das ruftevent.stopPropagation()
undevent.preventDefault()
.InformationsquelleAutor ckersch
Ist hier eine Lösung zur Verfügung gestellt von @plalx :
InformationsquelleAutor Pierre Granger