0

我对结合 jQuery Migrate 的 jQuery 不是很了解。我正在开发的网站使用 jQuery 1.12 和 Migrate 版本 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;
});

但是在一些过滤器以老式方式构建之后,这个监听器就被“遗忘”了。

该怎么办?

4

2 回答 2

1

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

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;
});
于 2017-01-16T14:22:57.177 回答
1

您正在删除附加侦听器的元素。这可能发生在过滤时。如果您将侦听器设置在根本没有被删除的父元素上(例如在元素中),您可以规避这种<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;
});
于 2017-01-16T14:25:03.267 回答