未捕获RangeError:超出最大调用堆栈大小,Chrome JS错误

时间:2013-08-15 13:14:48

标签: 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");
    });
}

我在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();
    });
});

1 个答案:

答案 0 :(得分:2)

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

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