jQuery实现jQuery-form.js实现异步上传文件


Posted in jQuery onApril 28, 2017

做为一个前端开发,你肯定遇到过这样的需求:异步上传文件,还要兼容IE 8。[纳尼,没遇到过,那你们产品和UI对你也忒好了吧。

遇到这种需求,如果项目不是很赶,可以自己用iframe来做,如果项目比较赶的话,就可以使用jquery-form.js插件来实现,方便快捷。

一、举个栗子

1.先下载 JQuery-form.js文件并引入,也可以使用CDN,因为是jquery插件,所以需要先引入jquery。

2.html 部分:

<form action='' enctype="multipart/form-data" method="post" name="fileForm"> 
<input type="file" class="file" name="filename"> 
</form> 
<button class="btn btn-primary" onclick="subimtBtn();">提交</button>

3.js部分:

function subimtBtn() { 
 var form = $("form[name=fileForm]"); 
 var options = {  
 url:'/upload', //上传文件的路径  
 type:'post',
 success:function(data){  
  console.log(data); 
  //....       //异步上传成功之后的操作
  }
 };  
 form.ajaxSubmit(options); 
}

这样异步上传就完成了,至于后台对上传的文件的获取,跟前台直接提交表单上传文件的方法是一样的。

二、进一步

​ 还没完呢,上面的例子是直接点击的type=file的input异步上传的,可是大家都知道默认的type=file的input框是很难看的,而且无法自定义样式,这个时候,要想做好看,就需要UI提供一个点击上传文件的图,然后把input隐藏,在点击图片的时候,再用js触发input选择文件,然后再点击提交按钮异步上传。嗯,道理上是这样的,然而是要兼容IE 8的呀亲,不信你在IE8 下面跑跑看,一个 “XXX拒绝访问”的大错误赤裸裸的躺在那儿。

​ 其实这个问题呢,是由于IE的安全机制造成的,对于低版本的IE浏览器来说,如果click事件不是直接穿透到input[type=file]元素上的,那么就会禁止提交,所以你用js触发的input选择文件自然就行不通了。

解决方法:使用label元素。

只需要把上面的form标签里的内容改成下面这样:

<label for="upload">
 <img src="upload.png">
</label>
<input type="file" id="upload" class="file" name="filename" style='display:none'>

啊,不对,上面的写法依然不能兼容IE 8,再改改:

<label for="upload">
 <input type="file" id="upload" class="file" name="filename" style='opacity:0;filter:alpha(opacity=0);'> 
</label>

嗯,就是这样,至于那个好看的点击上传的图片,就作为label元素的背景吧。

相信我,这样真的可以了,兼容IE 8完全没问题。

三、更进一步

可能你还需要判断一下上传的文件类型啥的,比如只让上传excel文件,那请这样写:

$(".file").bind("change",function(){ 
  var fileType = $(this).val().substring($(this).val().lastIndexOf(".") + 1);
  if(fileType != "xls" && fileType != "xlsx"){
    alert("只能上传excel文件");
  }
});

四、小结

嗯,也没啥可小结的,其实form.js是一个全,面支持表单的jQuery插件,有很多表单相关的给你,本篇只是介绍了其中一种功能的用法而已,其他更多的用法,请参照https://github.com/jquery-form/form官方文档。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
jquery动态赋值id与动态取id方法示例
Aug 21 jQuery
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
jQuery实现ajax回调函数带入参数的方法示例
Jun 26 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
jQuery实现本地存储
Dec 22 jQuery
jQuery tip提示插件(实例分享)
Apr 28 #jQuery
jQuery自定义元素右键点击事件(实现案例)
Apr 28 #jQuery
jQuery实现动态添加、删除按钮及input输入框的方法
Apr 27 #jQuery
jquery ui sortable拖拽后保存位置
Apr 27 #jQuery
jquery 禁止鼠标右键并监听右键事件
Apr 27 #jQuery
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 #jQuery
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 #jQuery
You might like
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
js Math 对象的方法
2013/09/01 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
javascript几个易错点记录
2014/11/26 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python常用库推荐
2016/12/04 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
实习单位接收函
2014/01/11 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
学生自我评语
2015/01/04 职场文书
班主任工作实习计划
2015/01/16 职场文书