【问题标题】:Assigning New FileReader to Object Doesn't Fire Onload将新的 FileReader 分配给对象不会触发 Onload
【发布时间】:2018-04-04 21:33:48
【问题描述】:

为什么会这样:

  var reader = new FileReader();
  reader.onload = function(event) {
    alert("work");
  };

但是当我使用我的命名空间对象来分配它时,它不起作用:

  nameSpace.cropper.reader = new FileReader();
  nameSpace.cropper.reader.onload = function(event) {
    alert("work");
  };

我对对象的工作原理有什么误解?

【问题讨论】:

  • 把它扔出去。 nameSpace.cropper 在这两行执行之前存在?
  • 是的,我在顶部使用nameSpace.cropper = nameSpace.cropper || {}; 进行实例化。我现在注意到,如果我从它的末尾删除reader.readAsText(file);,现在似乎它会崩溃......所以也许这不是分配问题?
  • 不知道,但从你这里的情况来看,如果 nameSpace.cropper 已经存在,我认为你的逻辑在语法上没有任何问题。
  • reader.readAsText(file) 是重点,这就是你告诉读者做它的工作的地方:) 如果你删除它,当然事件永远不会触发。
  • jsfiddle.net/05Lhca7g/4 对我来说运行良好。

标签: javascript jquery filereader


【解决方案1】:

您需要正确定义对象,第二个选项也可以。

确保您正在对事件调用 onload() 方法。

var nameSpace = new Object();
nameSpace.cropper = new Object();

nameSpace.cropper.reader = new FileReader();
nameSpace.cropper.reader.onload = function(event) {
   alert("work");
};

nameSpace.cropper.reader.onload();

【讨论】:

  • OOOOOh 我不敢相信我做到了。我假设 onload 事件在它准备好时才被触发。不过,我还没有打电话给它,所以它当然没有开火。谢谢,那我现在应该可以解决了!
  • 读取文件时不会自动触发 onload 吗?认为这是一个不必显式调用的事件处理程序
  • developer.mozilla.org/en-US/docs/Web/API/FileReader/onload 是的,它是一个事件处理程序。您不必显式调用它
  • @Taplar 我提到过,您需要在活动中调用它。只是为了演示它,我明确地调用了它。
  • 现在可以正常工作了,我只是误解了 FileReader 的 onload 方法是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多