form表单提交文件,这毫无疑问不是个好办法。但是,存在既有意义。既然H5都还让着东西存在着,呢么必然有其意义。

form表单中的input type=file这个空间,不得不说奇丑无比!问题是还不能修改它的样式,这就更让人蛋疼了。

好了,不闲扯,咱还是一条一条的列出来。

首先,就像开头说的,奇丑无比。那么自然是不可能就这么放页面里的,老板会打死你,美工会打死你,你自己都会打死你!那么怎么办呢?

display:none!唉,好办法,我给它干掉,再搞个好看的button耦合到file控件上不就行了吗?就只要

  $("#btn").on('click', function(){

    $("#file").click();

  });

不久完事大吉了吗?

  chrome说:好!ff说:OK!IE说:我去你奶奶的,你谁啊?我让你点了吗?你想干什么?!!呵呵、、、

这就TM的尴尬了。

那么怎么办呢?别管你再怎么纠结或者僧器,你还是得老老实实opacity:0; 不光这样,你还得filter:alpha(opacity=0);  (笑哭脸)ie就是这么任性。(ie9兼容opacity)

然后把你可爱的按钮放到file控件下层,记得是下层,让用户实际点击的是file控件。

————————————————————————————————华丽的。。。分割线+++++++++++++++++++++++++++++++++++++++++++++++++++

你以为这样就完了》??

难道你上网的时候上传头像没有预览?还有你选择文件的时候选错了格式怎么办?你的相册一次想上传N张图片怎么办?哈

我不会这么轻易的就狗带!

OK,做个图片预览吧。

其实图片预览的话要涉及到几方面。

这里先把file控件的一些特性罗列一下,下面都要用到。

首先,file的value不是你想想中的value,不要妄想了。而且file控件的value是不可编辑的,所以我们获取了也没卵用。这在我们清除文件的时候很心累。我们如果想要获取文件的地址,需要一些小小的手段。

其次,file控件支持accept属性,值得话类似image/*形式,*可以替换成相应的格式,多种格式逗号分隔。其实这种方式是不被推荐的,官方没说为什么不推荐。本人亲试觉得还真是别用了,卡出翔。加个类型      (image/*)卡出一  个级别,如果再有具体的格式(image/jpg)又卡出一个级别,后果就是被打死。。所以呢,还是服务器验证好了,或者干脆不验证,让用户去死(我什么都没说、、、)

然后,file控件还支持multiple属性,multiple=“multiple”,而如何获取每个文件,将在ajax中祥述。

最后,图片预览。

如何预览呢?两种方式,一是服务器预览,二是本地预览。本地预览才是真理。

那么就需要获取文件的url,写入到img的src里。之前说了,value并不是我们想要的,那么就需要用到js了。

function getUrl (file){
    var url = null;
    if(window.createObjectURL){            //basic
        url = window.createObjectURL(file);
    }
    else if(window.URL){                   //firefox
        url = window.URL.createObjectURL(file);
    }else if(window.webkitURL){            //webkit or chrome
        url = window.webkitURL.createObjectURL(file);
    }
    return url;
};
这段拿去尽情copy好了,死东西。jq并不提供相应方法。

然后url都有了,直接塞给img就完了。

至于头像的修改啦,什么裁剪啦什么的,那就不再本文范围内了。

form表单提交file的更多相关文章

  1. ajax form表单提交 input file中的文件

    ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了 ...

  2. Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)

    一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

  3. Form表单提交数据的几种方式

    一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交, ...

  4. Form表单提交,Ajax请求,$http请求的区别

    做过前端同学想必都避免不了要和后台server打交道.而以下这三种与后台交互的方式想必大家都不陌生. Form表单提交,Ajax请求,Angular的$http请求 以前一直搞不清楚什么时候应该用哪种 ...

  5. Form 表单提交的几种方式

    简单的总结一下form表单提交的几种方式:1.最简单的方式 就用form的submit提交方式,这种提交方式是不需要回调函数的   这种方式最近到一个form提供action路径后台接受就可以< ...

  6. 前端基础:form表单提交

    今天介绍下form表单提交经常用到的表单元素. 1:datalist元素,一般与input组建配合使用,以定义可能输入的值,例如: <!DOCTYPE html> <html lan ...

  7. js_ajax模拟form表单提交_多文件上传_支持单个删除

    需求场景: 用一个input type="file"按钮上传多张图片,可多次上传,可单独删除,最后使用ajax模拟form表单提交功能提交到指定方法中: 问题:由于只有一个file ...

  8. 24.form表单提交的六种方式

    form表单提交方式 1.无刷新页面提交表单 表单可实现无刷新页面提交,无需页面跳转,如下,通过一个隐藏的iframe实现,form表单的target设置为iframe的name名称,form提交目标 ...

  9. c#WebApi使用form表单提交excel,实现批量写入数据库

    思路:用户点击下载模板按钮,获取到excel模板,然后向里面填写数据保存.from表单提交的时候选择保存好的excel,实现数据的批量导入过程 先把模板放在服务器的项目目录下面:如 模板我一般放在:F ...

随机推荐

  1. Python进程间通信和网络基础

    Python进程间通信和网络基础 Python支持多种进程间通讯的方式, 有单机通信的signal和mmap等, 也有可以通过网络的socket方式, 这里先介绍select等的有关知识, socke ...

  2. Cayley凯莱定理——一一对应

    定理 过$n$个有标志顶点的树的数目等于$n^{n-2}$. 此定理说明用$n-1$条边将$n$个已知的顶点连接起来的连通图的个数是$n^{n-1}$.也可以这样理解,将n个城市连接起来的树状网络有$ ...

  3. 团队作业-Beta冲刺第二天

    这个作业属于哪个课程 <https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1> 这个作业要求在哪里 <https ...

  4. chrom浏览器-F12使用方法二

    文摘摘自:https://blog.csdn.net/run65536/article/details/80568543 提示:右键点击图片选择在新窗口或新标签页中打开可查看大图. 一.Element ...

  5. 树状数组 简单题 cf 961E

    题目链接 : https://codeforces.com/problemset/problem/961/E One day Polycarp decided to rewatch his absol ...

  6. ubuntu 安装 php7.2

    sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository p ...

  7. CSS3-::selection

    “::selection”只能设置两个属性,一个就是background,另一个就是color属性,设置其他属性是没有任何效果的. ::selection使用语法: /*Webkit,Opera9.5 ...

  8. 避免使用aireplay-ng指令时出现AP通道不对的方法

    本方法搜集网络:具体使用为在调试网卡为监听模式,使用airodump-ng指令扫描wifi后,需要先执行"airmon-ng stop wlan0"指令,然后再进行一系列抓包等操作 ...

  9. Django 连接mysql数据库

    首先在settings.py文件里将 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.pat ...

  10. int (*a)[10] 和 int *a[10] 的区别

    int *a[10] :指针数组.数组a里存放的是10个int型指针 int (*a)[10] :数组指针.a是指针,指向一个数组.此数组有10个int型元素 int *a[10] 先找到声明符a,然 ...