当前位置: 首页 > 知识库问答 >
问题:

Jquery .click() 给我“堆栈大小已超出”

梁晋鹏
2023-03-14

我的代码中的什么给了我这个错误?< br >

jquery-2.1.3.min.js:3 Uncaught RangeError:超出最大调用堆栈大小

超文本标记语言

<form id="addPhotoForm">
    <img class="pull-right" src="" width="100px" height="140px"/>
    <input type="file" id="addPhotoInput" name="addPhotoInput" style="display: none;"/> 
</form>

JS

//On click Photo
$('#addPhotoForm').on('click', function(){
    //Check if usrname exist
    var usrname = $('#usrname').val();
    if(usrname){
        $('#addPhotoInput').trigger('click');
    }
    else{
        alert("!");
    }
})

我该如何解决这个错误?< br >单击表单时,我正试图打开文件对话框。


更新我试过:

$('#addPhotoInput').click();

共有3个答案

盖昊东
2023-03-14

可以将命名空间用于单击事件

$('#addPhotoInput').on('click.input',function(){
    // do something
});

//On click Photo
$('#addPhotoForm').on('click.form', function(){
    //Check if usrname exist
    var usrname = $('#usrname').val();
    if(usrname){
        $('#addPhotoInput').trigger('click.input');
    }
    else{
        alert("!");
    }
})
翟善
2023-03-14

您已经将< code>click event附加到窗体本身。因此,当单击< code >任何表单元素时,由于< code >事件冒泡,它会再次被表单< code >捕获。因此,它将再次调用窗体上的< code>click事件。同样的过程一次又一次地重复

您可以防止事件传播

$('#addPhotoForm').on('click', function(e){
    e.stopPropagation();

   // rest of the code goes here
})

编辑:您应该将事件处理程序附加到表单内部的其他元素上,这些元素对于最终用户是可见的,而对于表单是不可见的

龙俊德
2023-03-14

为了避免任何使用jQuery绑定的click事件处理程序被触发,并且仍然保持事件传播(如果任何委托click事件也被绑定,这是很有用的),您可以改为调用本机DOM click()方法:

$('#addPhotoInput')[0].click();

或者:

$('#addPhotoInput').get(0).click();

这与以下内容相同:

document.getElementById('addPhotoInput').click();
 类似资料:
  • 当我运行代码时,Node。js抛出由过多递归调用引起的异常。我试图增加Node。js-stack-size-by,但是node。js崩溃,没有任何错误消息。当我在没有sudo的情况下再次运行时,请选择Node。js打印。有没有可能在不删除递归调用的情况下解决这个问题?

  • 尝试设置react路由时出现一些奇怪的错误 这是我的主index.js文件 我得到的错误是 不知道为什么

  • 问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步

  • 问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:

  • 如果用户未登录,我尝试将用户重定向到“TrapPage”。 这是我的代码: 当我将函数requireAuth放在onEnter上时,控制台给我一个错误: 我是一个反应迟钝的人,请耐心点:) 我的代码有什么问题?

  • 问题内容: 我有一台服务器,可能导致以下输出死亡: 但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。 使用该选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。 有人有任何解决方案或提示来深入了解此问题吗? 问题答案: 看来目前的答案是:站稳脚步,等待Node.js更新到新的V8版本,或者使用此Chromium项目错