2

我知道这是由我的 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();
    });
});
4

1 回答 1

2

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

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

于 2013-08-15T13:18:40.783 回答