【问题标题】:FineUploader complete callback event fires multiple timesFineUploader 完成回调事件触发多次
【发布时间】:2014-01-03 22:55:43
【问题描述】:

我在 UI 模式下使用 Fine Uploader 作为 jQuery 插件,并且我有一个文件类型的下拉列表,例如图像、视频、pdf 等。当下拉列表时,我正在动态更改 allowedExtensions 和 acceptFiles通过删除 Fine Uploader 生成的 div 进行更改,然后像这样重新创建它:

$('.qq-uploader').remove();
$('#jquery-wrapped-fine-uploader').fineUploader({/* options go here... */});

动态验证以这种方式工作得很好,但我在完整的回调事件中做了一些自定义的事情,比如显示缩略图。当文件被上传时,它会在第一次上传之前下拉列表发生变化时触发 complete 事件。

我现在的解决方法是将上传的文件名存储在一个数组中,如果它已经存在于数组中,则跳过自定义的完整逻辑。

我不明白为什么完整的回调事件会触发多次,因为我只上传一个文件。是否有对此的解释和/或防止重复回调触发的方法?

【问题讨论】:

  • 你用的是什么版本?我可以向您保证,每个已完成的文件只调用一次 onComplete,至少在当前版本中是这样。如果您使用的是当前版本,则问题出在您的代码中,因此您需要发布所有客户端代码以供检查。
  • 我使用的是 3.6.3 版本,这里是我在 jsfiddle 设置的一个例子:jsfiddle.net/SNrv9 更改下拉列表几次,然后上传文件来查看问题。
  • 那个版本已经超过 7 个月了。我建议你升级一下,看看问题是否仍然存在。
  • 我升级到 4.1.1,问题依旧。这是一个更新的 jsfiddle:jsfiddle.net/LRYFu 更改下拉几次然后上传文件。完整的警报将触发几次。我是最新版本的新手,有没有更好的方法来动态更改 allowedExtensions 和 acceptFiles?

标签: javascript jquery fine-uploader


【解决方案1】:

这里有几种方法可以实现您的目标:

  1. 在重新初始化 Fine Uploader 之前,从 DOM 中删除 Fine Uploader 容器元素。在您的小提琴中,您正在删除 Fine Uploader 使用的内部元素。这永远不会奏效。您需要销毁实例,而在使用 jQuery 插件时,唯一的方法是销毁包含插件实例的 DOM 元素。在 remove 容器元素之后,您可以重新添加它并重新启动 Fine Uploader。

  2. 使用multiple upload buttons feature。本质上,您将为每种文件类型创建一个具有适当验证设置的备用上传按钮,并更改当用户更改<select> 的值时显示的那个按钮。

【讨论】:

  • 我选择了第一个选项。感谢您的帮助 Ray Nicholus!
【解决方案2】:

我在 Ray Nicholus 的回答中再添加一行。 $('#jquery-wrapped-fine-uploader').off()

您还可以选择删除附加到 $('#jquery-wrapped-fine-uploader') 的事件处理程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多