首页 > 解决方案 > jQuery - 单击文件输入的父级并触发文件输入的单击事件后,它返回“递归过多”

问题描述

我的 jQuery 中有这个:

$(document).on('click', '.upload-wrap', function(event)
{
    $('[name="uploads[]"]').trigger('click');
});

但它返回“太多递归”错误!但是它不适用于我的其他元素,例如:

$(document).on('click', '.upload-image-wrap', function(event)
{
    $(this).next('[name="image"]').trigger('click');

});

我已经使用 setTimeout 来解决这个问题:

$(document).on('click', '.upload-wrap', function(event)
{
    setTimeout(function() {
        $('[name="uploads[]"]').trigger('click');
    }, 0);
});

但是现在 Firefox 在页面顶部显示“Firefox 阻止此站点打开 99999999 弹出窗口”,其中 99999999 以毫秒为单位增加。

我该如何解决?

谢谢

标签: javascriptjquerytriggersclick

解决方案


如果 a.upload-image-wrap具有该'[name="uploads[]"]'属性,您可以使用它not()来排除'[name="uploads[]"]'触发委托事件:

$(document).on('click', '.upload-wrap:not([name="uploads[]"])', () => {
  $('[name="uploads[]"]').trigger('click');
});

另一种选择是检查事件是否由人触发:

$(document).on('click', '.upload-wrap', (e) => {
  if (e.originalEvent !== undefined) $('[name="uploads[]"]').trigger('click');
});

推荐阅读