jquery - 未捕获的 RangeError : Maximum call stack size exceeded, Chrome JS 错误

标签 jquery google-chrome infinite-loop

我知道这是由我的js内部的无限循环引起的,但我无法解释为什么。我想单击一行来触发同一行上的按钮。我正在尝试以下 JQuery,但是当我单击一行时,我最终会在行单击函数内陷入无限循环。这是为什么?

$(document).on('pageinit', function (event) {
    bindRowClick();
});

function bindRowClick() {
    $('.orderTable').find('tr').click(function () {
        var btnView = $(this).find('td.tdViewOrder').find('input[type=submit]:first');
        btnView.trigger("click");
    });
}

我有一张 table ,上面有 class=".orderTable" <tbody> 内有一个中继器

<tbody>
   <asp:Repeater ID="rptrOrderView" runat="server" OnItemDataBound="rptrOrderView_ItemDataBound" OnItemCommand="rptrOrderView_ItemCommand">
      <ItemTemplate>
           <tr class="hand">
              <td class="title">
                  <asp:Label runat="server" ID="lblTdOrderNum"></asp:Label>
              </td>
              <td class="tdViewOrder">
                  <asp:Button runat="server" ID="btnViewOrder" Text="View" CssClass="btnViewOrder" SkinID="btnViewMiniB" CommandName="ViewOrder" />
              </td>
           </tr>
      </ItemTemplate>
   </asp:Repeater>
</tbody>

我知道这是一个很常见的问题,但我仍然没有解决我的问题。

解决方案

我已添加event.stopPropagation();到我的点击处理程序,现在正在工作。

$(document).on('pageinit', function (event) {
    bindRowClick();
    $('.btnViewOrder').click(function (event) {
        event.stopPropagation();
    });
});

最佳答案

这绝对是因为 btnView.click 向上传播并最终触发 tr 的点击事件 - 导致整个事件循环进行。

您需要做的是从 btnView 的点击处理程序中调用 event.stopPropagation() (问题中没有)。

关于jquery - 未捕获的 RangeError : Maximum call stack size exceeded, Chrome JS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253431/

相关文章:

c - HAL_Delay() 陷入死循环

C++ 程序,输入无限循环

c++ - 摆脱无限循环中的生成窗口

javascript - 在 Zepto 中将 onClick 方法转换为 tap 方法

javascript - 按时间间隔链接相似元素修改

html - Flex basis 100% in column flexbox : full height in Firefox, not in Chrome

node.js - 使用 puppeteer 在 headless chrome 中运行 Flash 游戏

javascript - jquery 响应后无法重新加载 dataTable

javascript - Noob jQuery "$"函数返回问题

css - 一小段 CSS 在 Chrome 中不起作用