我的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以毫秒为单位增加。

我该如何解决?

谢谢

最佳答案

如果.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');
});

关于javascript - jQuery-单击文件输入的父级并触发文件输入的click事件后,它将返回“太多的递归”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52379704/

10-16 15:41