【问题标题】:jQuery: Too Much Recursion and Maximum Call Stack Size ExceededjQuery:递归过多且超出最大调用堆栈大小
【发布时间】:2014-08-03 17:51:14
【问题描述】:

我正在构建一个具有翻转单个卡片的 jQuery 函数的应用程序。但是,在 Firefox 和 Chrome 中,我不断收到错误“递归过多”和“超出最大调用堆栈大小”。

从其他有关此事的文章中,我在调用中添加了 stopImmediatePropagation(),但仍然收到错误...不像以前那么多,但仍然足以引起注意。

有一个应该翻转的基础“卡片”,然后是按钮和测试坐在上面,这不应该导致卡片翻转。下面的工作,但会导致 jQuery 冒泡的递归。

当前代码是:

  $(document).on("click", ".card-container", function(e){
    e.stopImmediatePropagation();  
    $(this).flip();
  });
  $(document).on("click", ".btn", function(e){
    e.stopImmediatePropagation(); 
    $(this).click();
  });
  $(document).on("click", "p", function(e){
    $(this).click();
  });

我应该怎么做才能防止这些错误发生?

干杯:)

【问题讨论】:

    标签: javascript jquery performance recursion callstack


    【解决方案1】:

    以下代码块负责该错误,

    $(document).on("click", ".btn", function(e){
        e.stopImmediatePropagation(); 
        $(this).click();
    });
    
    $(document).on("click", "p", function(e){
        $(this).click();
    });
    

    删除它。这没有任何意义。

    DEMO

    注意:在控制台查看错误

    【讨论】:

    • 不幸的是,删除它们会导致卡片在单击按钮或 p 元素时翻转。如何防止这些点击导致卡片翻转?
    • @Dezzamondo 添加这个,$(document).on("click", ".btn,p", function(e){ return; });
    • 抱歉 Raj,运气不好 :(
    • @Dezzamondo 你试过用e.StopPropagation() 代替return;..?
    • 成功了! e.StopPropagation() 导致我当前的库出现一些错误,但使用 e.stopImmediatePropagation() 有效:)
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2019-09-09
    • 2018-03-02
    • 2015-02-06
    相关资源
    最近更新 更多