开发者问题收集

WooCommerce 中超出了最大调用堆栈大小

2018-10-17
1987

我这里有这个 HTMl 结构:

<li class="description_tab" id="tab-title-description" role="tab" aria-controls="tab-description">
      <a href="#tab-description">Description</a>
</li>

这是我的 JS 函数:

jQuery('body.woocommerce div.product .woocommerce-tabs ul.tabs li').click(function () {
    jQuery('a', this).click();
});

我尝试检查是否单击了选项卡。如果是,我将触发单击选项卡内部的 a。但是我在加载页面时收到错误:

Uncaught RangeError: Maximum call stack size exceeded
at String.replace ()
at Function.trim (jquery.js?ver=1.12.4:2)
at new a.fn.init (jquery-migrate.min.js?ver=1.4.1:2)
at n (jquery.js?ver=1.12.4:2)
at HTMLLIElement. (custom.js?ver=4.9.8:77)
at HTMLLIElement.dispatch (jquery.js?ver=1.12.4:3)
at HTMLLIElement.r.handle (jquery.js?ver=1.12.4:3)
at Object.trigger (jquery.js?ver=1.12.4:3)
at Object.a.event.trigger (jquery-migrate.min.js?ver=1.4.1:2)
at HTMLAnchorElement. (jquery.js?ver=1.12.4:3)

出了什么问题?

2个回答

这就是它现在的工作方式。可以工作,但代码太多:

jQuery('body.woocommerce div.product .woocommerce-tabs ul.tabs li').click(function () {
        var description = jQuery('.woocommerce-Tabs-panel--description');
        var reviews = jQuery('.woocommerce-Tabs-panel--reviews');
        if (!jQuery(this).hasClass('active')) {
            if (jQuery(this).hasClass('reviews_tab')) {
                jQuery('.description_tab').removeClass('active');
                jQuery(this).addClass('active');
                description.hide();
                reviews.show();
            } else if (jQuery(this).hasClass('description_tab')) {
                jQuery('.reviews_tab').removeClass('active');
                jQuery(this).addClass('active');
                reviews.hide();
                description.show();
            }
        }
    });

我不知道是否可以做得更好。

J. Doe
2018-10-17

使用 $(this) ,而不是 this

jQuery('body.woocommerce div.product .woocommerce-tabs ul.tabs li').click(function () {
    jQuery('a', $(this)).click();
});
Sergej
2018-10-17