当包装在$ timeout时,JQuery File输入元素在Chrome中不一致地触发

时间:2015-07-01 22:09:25

标签: jquery angularjs google-chrome

所以,我有一个处理文件上传的指令,(包含angular-file-upload),在某些情况下,这个指令包装了一个锚标记。当指令运行以下代码时,此锚标记的单击事件会导致$apply已运行,其中.fileUploadInput元素为<input type="file" />

fileUploadClick = (event: any) => {
  this.element.find('.fileUploadInput').click();
};

为了解决这个问题,我把它包装在$timeout

fileUploadClick = (event: any) => {
  this.$timeout(() => {
    this.element.find('.fileUploadInput').click();
  });
};

在Chrome 43(非FF / Safari)中,文件选择器在打开操作系统选择器之前需要多次单击事件。我可以看到每次都会运行超时内的函数调用,但只是间歇性地执行OS选择器。删除$timeout会导致选择器每次都打开,但会导致$apply正在进行中。

是否有人知道在Chrome中导致此行为会导致添加超时的原因是什么?或者,有没有办法停止现有$apply或在$timeout之外等待它的方法? $ interval会导致同样的问题。

谢谢,

马特

0 个答案:

没有答案