javascript - 未捕获的范围错误 : Maximum call stack size exceeded (jquery-1. 12.4)

标签 javascript jquery file-upload

尝试使用 Jquery 上传带预览的图像文件。它工作正常,我得到了预览,但是当我点击上传按钮时,我看到了一条错误消息

Uncaught RangeError: Maximum call stack size exceeded

在控制台中。


代码如下:

$(document).ready(function() {
  var readURL = function(input) {
    if (input.files && input.files[0]) {
      var reader = new FileReader();
      reader.onload = function(e) {
        $('.profile-image').attr('src', e.target.result);
      }
      reader.readAsDataURL(input.files[0]);
    }
  }

  $(".file-upload").on('change', function() {
    readURL(this);
  });

  $(".upload-button").on('click', function() {
    $(".file-upload").click();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <img class="profile-image" src="demo.png" alt="Profile Image">
  <a class="profile-img-edit upload-button">
    <i class="fas fa-camera"></i> Select Image
    <input class="file-upload" type="file" name="file" size="40" accept=".png, .jpg, .jpeg, .gif">
  </a>
</div>

最佳答案

问题是因为 .file-upload 元素上的 click 事件冒泡到 .upload-button 并被click 处理程序,它触发 .file-upload 上的点击处理程序,该处理程序冒泡到 .upload-button 触发点击...和等等。

要解决此问题,请通过向其添加 click 事件处理程序并调用 stopPropagation()< 来阻止事件从 .file-upload 冒泡event 上,像这样:

$(document).ready(function() {
  var readURL = function(input) {
    if (input.files && input.files[0]) {
      var reader = new FileReader();
      reader.onload = function(e) {
        $('.profile-image').attr('src', e.target.result);
      }
      reader.readAsDataURL(input.files[0]);
    }
  }

  $(".file-upload").on('change click', function(e) {
    e.stopPropagation();
    readURL(this);
  });

  $(".upload-button").on('click', function() { 
    $(".file-upload").click();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <img class="profile-image" src="demo.png" alt="Profile Image">
  <a class="profile-img-edit upload-button">
    <i class="fas fa-camera"></i> Select Image
    <input class="file-upload" type="file" name="file" size="40" accept=".png, .jpg, .jpeg, .gif">
  </a>
</div>

关于javascript - 未捕获的范围错误 : Maximum call stack size exceeded (jquery-1. 12.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54984522/

相关文章:

JavaScript:DOM 加载事件、执行顺序和 $(document).ready()

javascript - 如何在 JavaScript 匿名函数的声明时使用变量的值?

file-upload - 用于签名(通过 token /智能卡)并将文档上传到 servlet 的 java applet

javascript - 当只有一个 effect 的 deps 发生变化,而不是其他的时,React useEffect Hook

javascript - 是否可以在 Angular ng-show 表达式中获取 HTML 元素的计数?

javascript - 正确实例化复杂的 JS 对象

javascript - 使用 Angularjs 提交动态表

php - 使用 JQuery 求和列值以获取多个表中的总计

php - 无法打开流 : Is a directory in

javascript - Bootstrap : file input field ignores clicks when used in modal dialog