jquery uploadify如何取消已上传成功文件


Posted in Javascript onFebruary 08, 2017

如何使用uploadify进行文件上传,各位都能够在网上找到,但是需要注意版本号.我这里仅仅说一下,在文件已经成功上传到服务器之后,如何取消文件的上传.

我使用的是自动上传,即将'auto'属性设置为true.

1.首先我们要设置cancelmg属性,即设置文件上传成功后,显示在文件上的关闭图片.这里需要修改对应CSS中的代码

.uploadify-queue-item .cancel a { 
  background: url('../img/uploadify-cancel.png') 0 0 no-repeat; 
  float: right; 
  height: 16px; 
  text-indent: -9999px; 
  width: 16px; 
}

将这里url中的uploadify-cancel.png的地址设置正确.这时可以看到上传的文件后会显示对应的取消关闭图片.当然我们不修改源码,将图片放置在img文件夹下也可以.

2.当我们使用自动上传,点击文件对应上的关闭,这时是不会触发'onCancel'事件的,(onCancel事件是针对不自动上传时进行触发的)所以我们需要需要绑定对应的事件到取消图片上.

3.当每个图片上传成功之后,都会触发”onUploadSuccess”事件.所以我们将绑定操作写在onUploadSuccess函数中.

4.代码如下:

onUploadSuccess:function(file, data, response) { 
    var cancel=$('#fileQueue .uploadify-queue-item[id="' + file.Id + '"]').find(".cancel a"); 
if (cancel) { 
  cancel.attr("deletefileid",file.id); 
  cancel.click(function () { 
    //我的处理逻辑 
    //1.首先调用ajax 传递文件名到后台,后台删除对应的文件(这个我就不写了) 
    //2.从后台返回的为true,表明删除成功;返回false,表明删除失败 
     var deletefileid = cancel.attr("deletefileid"); 
     $("#uploadify").uploadify("cancel",deletefileid);//将上传队列中的文件删除. 
  }); 
} 
}

5.$("#uploadify").uploadify("cancel",deletefileid); 这会调用uploadify中的cancel方法,但是cancel方法中有一个问题,通过查看源码,发现cancel方法并没有将队列中的文件删除,只是在前台删除了对应的div.这样就会导致,假设当我上传文件A,已经上传成功,这时我点击删除图片,取消文件A的上传,这时前台A文件消失,但是假如我再次上传文件A,会提示我已经上传过文件A了,这显然是有问题的.
其实,uploadify的cancel方法就是针对还没有上传到服务器的文件,这时点击取消,调用cancel方法,即cancel方法针对的是还没有上传到服务器的文件.

这时我们需要修改源码将对应需要删除的文件在队列中进行删除.

cancel : function(fileID, supressEvent) { 
 
  var args = arguments; 
 
  this.each(function() { 
    // Create a reference to the jQuery DOM object 
    var $this    = $(this), 
      swfuploadify = $this.data('uploadify'), 
      settings   = swfuploadify.settings, 
      delay    = -1; 
 
    if (args[0]) { 
      // Clear the queue 
      if (args[0] == '*') { 
        var queueItemCount = swfuploadify.queueData.queueLength; 
        $('#' + settings.queueID).find('.uploadify-queue-item').each(function() { 
          delay++; 
          if (args[1] === true) { 
            swfuploadify.cancelUpload($(this).attr('id'), false); 
          } else { 
            swfuploadify.cancelUpload($(this).attr('id')); 
          } 
          $(this).find('.data').removeClass('data').html(' - Cancelled'); 
          $(this).find('.uploadify-progress-bar').remove(); 
          $(this).delay(1000 + 100 * delay).fadeOut(500, function() { 
            $(this).remove(); 
          }); 
        }); 
        swfuploadify.queueData.queueSize  = 0; 
        swfuploadify.queueData.queueLength = 0; 
        // Trigger the onClearQueue event 
        if (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount); 
      } else { 
        for (var n = 0; n < args.length; n++) { 
          swfuploadify.cancelUpload(args[n]); 
          /* 添加代码 */ 
          delete swfuploadify.queueData.files[args[n]]; 
          swfuploadify.queueData.queueLength = swfuploadify.queueData.queueLength - 1; 
          /* 添加结束 */ 
          $('#' + args[n]).find('.data').removeClass('data').html(' - Cancelled'); 
          $('#' + args[n]).find('.uploadify-progress-bar').remove(); 
          $('#' + args[n]).delay(1000 + 100 * n).fadeOut(500, function() { 
            $(this).remove(); 
          }); 
        } 
      } 
    } else { 
      var item = $('#' + settings.queueID).find('.uploadify-queue-item').get(0); 
      $item = $(item); 
      swfuploadify.cancelUpload($item.attr('id')); 
      $item.find('.data').removeClass('data').html(' - Cancelled'); 
      $item.find('.uploadify-progress-bar').remove(); 
      $item.delay(1000).fadeOut(500, function() { 
        $(this).remove(); 
      }); 
    } 
  }); 
 
},

总结

以上是我针对如何取消已经上传成功的文件的方法.当然如果不是自动上传,那么不用修改uploadify,直接删除就好。

Javascript 相关文章推荐
jquery下为Event handler传递动态参数的代码
Jan 06 Javascript
再次分享18个非常棒的jQuery表格插件
Apr 10 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
js弹出确认是否删除对话框
Mar 27 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
jquery判断对象是否为空并遍历对象的简单实例
Jul 26 Javascript
jquery实现图片切换代码
Oct 13 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
深入理解JavaScript 参数按值传递
May 24 Javascript
webpack 打包压缩js和css的方法示例
Mar 20 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 #Javascript
用move.js库实现百叶窗特效
Feb 08 #Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 #Javascript
Move.js入门
Feb 08 #Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 #Javascript
详解Javascript百度地图接口开发文档中的类和方法
Feb 07 #Javascript
简单实现bootstrap导航效果
Feb 07 #Javascript
You might like
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
Python生成随机验证码的两种方法
2015/12/22 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
外语专业毕业生自荐信
2014/04/14 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
大学生在校表现评语
2014/12/31 职场文书
工作感想范文
2015/08/07 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript