Je ne suis pas très connu avec jQuery en combinaison avec jQuery Migrate. Le site sur lequel je travaille utilise jQuery 1.12 avec Migrate version 1.4.1

Après quelques recherches, le script ci-dessous fonctionne correctement au chargement de la page:

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

Mais après avoir construit un filtre à l'ancienne, cet auditeur est «oublié».

Que faire?

0
Alvin Bakker 16 janv. 2017 à 17:18

2 réponses

Meilleure réponse

Vous supprimez l'élément auquel l'écouteur est attaché. Cela se produit probablement au moment du filtrage. Vous pouvez contourner ce comportement, si vous définissez l'écouteur sur un élément parent, qui n'est pas du tout supprimé (par exemple dans un élément <td> l'élément <table>). Je ne placerais pas l'auditeur au niveau supérieur (document), car il est beaucoup plus performant de le définir sur un parent, qui n'est pas supprimé. Si vous définissez l'auditeur sur document, chaque clic est surveillé et recherché l'élément .single_add_to_cart_button.

Vous pouvez définir l'auditeur sur le parent, mais ne réagissant aux clics sur .single_add_to_cart_button que si vous utilisez l'extrait de code suivant:

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;
});
1
ssc-hrep3 16 janv. 2017 à 14:25

Si les éléments qui correspondent à .single_add_to_cart_button sont supprimés et rajoutés, vous devez utiliser la délégation, c'est-à-dire placer l'auditeur sur un élément qui est toujours là (corps, document) et ne l'exécuter que sur les éléments qui correspondent à votre requête donnée, En tant que tel:

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;
});
1
motanelu 16 janv. 2017 à 14:22