2017-01-16 1 views
0

Ich bin nicht sehr bekannt mit jQuery in Kombination mit jQuery Migrate. Der Standort an dem ich arbeite nutzt jQuery 1.12 mit Migrate Version 1.4.1Reactivate Code nach Filter verwendet

Nach einigem die unten stehenden Skript Suche funktioniert auf Seite lädt fein:

jQuery(".single_add_to_cart_button").click(function(e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 

Aber nach einigen Filter auf die altmodische Art und Weise bauen, diese Hörer ist 'vergessen'.

Was ist zu tun?

+0

Wenn das '.single_add_to_cart_button' Element entfernt wird und dann anschließend in dem DOM neu Sie Ich muss einen delegierten Event-Handler verwenden. –

Antwort

1

Sie entfernen das Element, an dem der Listener angeschlossen ist. Dies geschieht wahrscheinlich zur Filterzeit. Sie können dieses Verhalten umgehen, wenn Sie den Listener auf ein übergeordnetes Element setzen, das überhaupt nicht entfernt wird (z. B. in einem <td> das <table> Element). Ich würde den Listener nicht auf die oberste Ebene setzen (document), weil es viel besser ist, ihn auf ein Elternelement zu setzen, das nicht entfernt wird. Wenn Sie den Listener auf document setzen, wird jeder Klick überwacht und nach dem Element .single_add_to_cart_button gesucht.

Sie können den Hörer an den Eltern gesetzt, sondern nur die Klicks auf .single_add_to_cart_button reagieren, wenn Sie den folgenden Code-Schnipsel verwenden:

jQuery("#tableWithId").on("click", ".single_add_to_cart_button", function(e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 
+0

Jeez. Zunächst funktionierte jQuery (Dokument) nicht. Danke trotzdem –

1

Wenn die Elemente, die .single_add_to_cart_button entsprechen, werden entfernt und wieder hinzugefügt, müssen Sie Delegierung verwenden aka legen Sie den Hörer auf ein Element, das immer da ist (Körper, Dokument) und dann nur auf Elemente ausführen, die von Ihnen angegebene Abfrage entsprechen, als solche:

jQuery(document).on('click', '.single_add_to_cart_button', function (e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
});