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实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
Angular2使用jQuery的方法教程
May 28 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
深入浅析angular和vue还有jquery的区别
Aug 13 jQuery
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
jQuery实现动态加载瀑布流
Sep 01 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
基于mysql的论坛(7)
2006/10/09 PHP
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
Zend Guard一些常见问题解答
2008/09/11 PHP
phpize的深入理解
2013/06/03 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python快速从注释生成文档的方法
2016/12/26 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
python实现输入数字的连续加减方法
2018/06/22 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Python基于Faker假数据构造库
2020/11/30 Python
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
竞争上岗演讲稿
2014/01/05 职场文书
社区志愿者活动总结
2014/06/26 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫