首页 > 解决方案 > 为什么我在触发点击时遇到太多递归?

问题描述

我的 C# Web 应用程序中有以下代码:

<div id="divDocument" class="cursor-pointer">
  <i class="icon-document font-size-3em mt10 fileupload-border"></i>
  <asp:FileUpload ID="fileUploadDocument" runat="server" CssClass="d-none" />
</div>
$(document).ready(function () {
  $("#divDocument").click(function () {
    $("#<%= fileUploadDocument.ClientID %>").trigger('click');
  });
});

但我在 javascript 控制台收到以下错误:

内部错误:递归过多

有人能帮我吗?

亲切的问候

标签: javascriptjqueryhtmlvb.net

解决方案


该错误是因为您在处理单击事件的当前元素的子元素上引发了单击事件,从而创建了无限循环。

要解决此问题,您要么需要删除内部trigger('click'),要么在该内部元素上添加stopPropagation()调用。

但是值得注意的是,如果您的目标是增加文件输入的命中区域,那么更好的方法是labelinput. 这避免了您的问题并消除了对任何 JS 代码的需要。

<label>
  <i class="icon-document font-size-3em mt10 fileupload-border"></i>
  <asp:FileUpload ID="fileUploadDocument" runat="server" CssClass="d-none" />
</label>

推荐阅读