使用过滤器后重新激活代码

Reactivate code after filter is used

我不太了解 jQuery 与 jQuery 迁移的结合。我正在处理的站点使用 jQuery 1.12 和迁移版本 1.4.1

经过一些搜索,下面的脚本在页面加载时工作正常:

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

但是在一些过滤器以老式的方式构建之后,这个监听器是 'forgotten'。

怎么办?

如果匹配 .single_add_to_cart_button 的元素被删除并且 re-added,您需要使用委托,也就是将侦听器放置在始终存在的元素(正文、文档)上,然后仅 运行 它在与您给定查询匹配的元素上,例如:

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

您正在删除附加侦听器的元素。这可能发生在过滤时。如果您在父元素上设置侦听器,则可以规避该行为,而父元素根本不会被删除(例如,在 <td><table> 元素)。我不会将侦听器设置在顶层 (document),因为将它设置在父级上性能要好得多,父级不会被删除。如果将侦听器设置为 document,每次点击都会被监视并搜索 .single_add_to_cart_button 元素。

您可以将侦听器设置为父级,但如果您使用以下代码段,则仅对 .single_add_to_cart_button 上的点击做出反应:

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