整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML input type=file文件选择表单元素二三事

、良生- input type=file与文件上传

本文所说的input type=file指的是type类型是file的input元素,最简HTML代码如下:

<input type=file>

但是,为了习惯,我们多写成:

<input type="file">

在HTML5出现之前(XHTML),我们的闭合规则则有些出入:

<input type="file" />

顾名思义,选择文件,并上传文件。

在万恶的旧时代,HTML5还没有出现之前,原生的file input表单元素只能让我们一次上传一张图片。无法满足一次上传多图的交互需求,所以,很多场景,就被swfupload.js给取代了,有点逐渐淡出人们视野的感觉。

然,技术发展,日新月异,三十年河东,三十年河西。随着原生HTML5表单对多图(multiple属性)、上传前预览,二进制上传等支持越来越广泛,原生的file input表单元素又迎来了新的升级,flash为背景的swfupload.js注定要落寞。

但是,对于PC项目,IE8-IE9浏览器还是不能忽略的。所以,现在,很流行的一种处理方式,就是HTML5 file上传和flash swfupload上传一起整合的模式,优先使用原生HTML5上传,不支持的,使用flash上传。我之前有篇关于HTML5上传的文章,每天访问量很高的:“基于HTML5的可预览多图片Ajax上传”,大家有兴趣可以看看。

如果想使用浏览器原生特性实现文件上传(如图片)效果,父级的form元素有个东西不能丢,就是:

enctype="multipart/form-data"

enctype属性规定在发送到服务器之前应该如何对表单数据进行编码,默认的编码是:”application/x-www-form-urlencoded“。对于普通数据是挺适用的,但是,对于文件,科科,就不能乱编码了,该什么就是什么,只能使用multipart/form-data作为enctype属性值。

无论是旧时代的单图上传,还是HTML5中的多图上传,均是如此。

文件,尤其图片,上场前能够预览,是很棒的交互体验。不走服务器,不耗费流量,多棒!

理想虽好,实现起来……

在HTML5还没出现的旧时代,只有低版本的IE浏览器貌似有方法,使用私有的滤镜,超越安全的限制(其实是利用了不好的东西),实现图片直接预览;但是呢,那个时候,Chrome, FireFox没有这一出,于是,想要使用原生file input实现图片的上传前预览,兼容性坎很难跨过去。

但是,后来,HTML5来了,我们出现了转机,IE10+以及其他现代浏览器,可以让我们直接读取图片的数据,然后在页面上呈现,实现了上传前预览;加上之前老IE的滤镜策略,貌似,可行。但是呢但是,老的IE浏览器只能最多一次选择一个文件,因此,只有单图上传的时候,大家可以考虑考虑。

传统的form提交,是要改变页面流的,也就是刷新后跳转。好的体验应该是走Ajax交互的。HTML5里面支持二进制formData数据提交,因此,可以从容Ajax提交上传的文件数据;那老旧的IE浏览器怎么办?

一般方法如下:

<form action="" method="post" enctype="multipart/form-data" target="uploadIframe">< <iframe id="uploadIframe"></iframe>

var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document; var response = doc.body && doc.body.innerHTML;

OK, 当然,你也可以不用像上面这么麻烦,直接使用jquery.form.js. 原理呢,就是上面这样,但是,不需要这么麻烦。

原生的file input不收待见的另外一个原因是:长的丑还不好控制。

举个例子,下图这个“选择文件”这几个文字,我们就不好对file控件动刀子实现自定义:

file input框

怎么办呢?

有一种方法是这样的: 让file类型的元素透明度0,覆盖在我们好看的按钮上。然后我们去点击好看的按钮,实际上点击是是file元素。

然而,此方法有一些不足:

更好的方法是,使用label元素与file控件关联,好处在于:

<label class="ui_button ui_button_primary" for="xFile">上传文件</label> <form><input type="file" id="xFile" style="position:absolute;clip:rect(0 0 0 0);"></form>

效果如下(真实实时效果):

input file类型控件有一个属性,名为

accept

, 可能有些小伙伴不太了解。可以用来指定浏览器接受的文件类型,也就是的那个我们打开系统的选择文件弹框的时候,默认界面中呈现的文件类型。例如:

accept="image/jpeg"

,则界面中只有jpg图片,如下截图,同时,窗体右下方是“自定义文件”按钮:

自定义文件

实际开发的时候,很少只允许传jpg图片,应该都是只能传图片类型,此时,可以使用:

accept="image/*"

于是乎,“自定义文件”按钮变成了语义更明确的“图片文件”:

图片文件

accept属性值其实是MIME类型, 例如下面几个可能常用的:

accept="application/pdf" accept="audio/x-mpeg" accept="text/html" .accept="video/x-mpeg2"

然后,多个属性值使用逗号分隔,例如:

<input accept="audio/*,video/*,image/*">

现代浏览器直接value = "", 有些IE浏览器貌似不行,好像使用file.outerHTML = file.outerHTML,我自己没测试。

不过我觉得比较麻烦,还要判断浏览器什么的。像本文的Ajax单图上传,直接form.reset()就可以了。

以上~

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。

html开发中,表单是页面上重要的内容,用户输入内容大部分内容都是通过表单收集的,在html4中表单元素是相对繁琐的,在html5中,吸纳了web forms2.0标准,大大加强了针对表单元素的功能。下面为大家介绍html5中新增的表单元素。

form元素

在html4中表单内的从属元素必须写在表单内部,在html5中没有这个限制,可以写在页面任何地方,然后给该元素一个from属性,属性值为该表单的id,这样就可以声明该元素从属于指定的表单了。示例代码:<form id="test"><input type="text"></form><textarea form="test"></textarea>textarea属性被写在form表单之外,但它从属于form表单,所以将form表单id指定给textarea元素的form属性。这样的好处在于我们可以方便添加元素的样式,因为它们不是分散在各表单之内。不过现在只是部分浏览器支持这一属性。

formaction属性

在html4中,一个表单所有的元素只能通过表单的action属性统一提交另一页面,而在HTML5中可以给所有的提交按钮(<input type="submit">、<input type="image">、<button type="submit">),都增加了不同的formaction属性,点击不同的按钮提交给不同的页面。

placeholder属性

placeholder是指当文本框(<input type="text">或<textarea>)处于未输入状态时文本框显示的输入提示。只要加上了placeholder属性,在指定提示文字就可以了。

autofocus属性

给文本框、选择框或按钮加上该属性,当画面打开时,控件自动获得焦点。在html4中做到这个效果需要使用JavaScript如“control.focus()”。不建议随意使用该属性,比如搜索页面中的搜索文本框。

list属性

在html5中,为单行文本框增加了一个list属性,该属性的值为某个datelist元素的id。datelist也是html5新增的元素,该元素类似选择框(select)。但是当用户想要设定的值不在选择列表时,允许自行输入。该元素本身并不显示,而是文本框获得焦点时提示输入的方式显示。为了避免在没有支持元素的浏览器显示错误,可以用css将它设置为不显示。

autocomplete属性

辅助输入所有的自动完成功能,节省输入时间,同时也十分方便。可以指定“on”、“off”、“不指定”这三种值,不指定时,取决各个浏览器。属性为on时,可以显示指定候补输入的数据列表,off反之。

如果有漏掉其他方法,欢迎大家补充。每天学习一个知识点,每日寄语“失败只有一种,那就是半途而废。”

TML5 是 HyperText Markup Language 5 的缩写,HTML5 技术结合了 HTML4.01 的相关标准并革新,符合现代网络发展要求,在 2008 年正式发布。HTML5 由不同的技术构成,其在互联网中得到了非常广泛的应用,提供更多增强网络应用的标准机。与传统的技术相比,HTML5 的语法特征更加明显,并且结合了SVG的内容。这些内容在网页中使用可以更加便捷地处理多媒体内容,而且 HTML5中还结合了其他元素,对原有的功能进行调整和修改,进行标准化工作。HTML5 在 2012 年已形成了稳定的版本。

HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。HTML产生于1990年,1997年HTML4成为互联网标准,并广泛应用于互联网应用的开发。HTML5将Web带入一个成熟的应用平台,在这个平台上,视频、音频、图像、动画以及与设备的交互都进行了规范。

关于HTML5的一些新规范、新特性接下来,小编一一给咱们介绍下哈!

一、智能表单

表单是实现用户与页面后台交互主要组成部分,HTML5在表单的设计上功能更加强大。input类型和属性的多样性大大地增强了HTML可表达的表单形式,再加上新增加的一些表单标签,使得原本需要JavaScript来实现的控件,可以直接使用HTML5的表单来实现;一些如内容提示、焦点处理、数据验证等功能,也可以通过HTML5的智能表单属性标签来完成。

二、绘图画布

HTML5的canvas元素可以实现画布功能,该元素通过自带的API结合使用JavaScript脚本语言在网页上绘制图形和处理,拥有实现绘制线条、弧线以及矩形,用样式和颜色填充区域,书写样式化文本,以及添加图像的方法,且使用JavaScript可以控制其每一个像素。HTML5的canvas元素使得浏览器无需Flash或Silverlight等插件就能直接显示图形或动画图像。

三、多媒体

HTML5最大特色之一就是支持音频视频,在通过增加了<audio>、<video>两个标签来实现对多媒体中的音频、视频使用的支持,只要在Web网页中嵌入这两个标签,而无需第三方插件(如Flash)就可以实现音视频的播放功能。HTML5对音频、视频文件的支持使得浏览器摆脱了对插件的依赖,加快了页面的加载速度,扩展了互联网多媒体技术的发展空间。

四、地理定位

现今移动网络备受青睐,用户对实时定位的应用越来,要求也越来越高。HTML5通过引入Geolocation的API可以通过GPS或网络信息实现用户的定位功能,定位更加准确、灵活。通过HTML5进行定位,除了可以定位自己的位置,还可以在他人对你开放信息的情况下获得他人的定位信息。

五、数据存储

HTML5较之传统的数据存储有自已的存储方式,允许在客户端实现较大规模的数据存储。为了满足不同的需求,HTML5支持DOM Storage和Web SQL Database 两种存储机制。其中,DOM Storage 适用于具有key/value对的基本本地存储;而WebSQLDatabase是适用于关系型数据库的存储方式,开发者可以使用SQL语法对这些数据进行查询、插入等操作。

六、多线程

HTML5利用Web Worker将Web应用程序从原来的单线程业界中解放出来,通过创建一个Web Worker对象就可以实现多线程操作。JavaScript创建的Web程序处理事务都是在单线程中执行,响应时间较长,而当JavaScript过于复杂时,还有可能出现死锁的局面。HTML5新增加了一个WebWorkerAPI,用户可以创建多个在后台的线程,将耗费较长时间的处理交给后台面不影响用户界面和响应速度,这些处理不会因用户交互而运行中断。使用后台线程不能访问页面和窗口对象,但后台线程可以和页面之间进行数据交互。子线程与子线程之间的数据交互,大致步骤如下:①先创建发送数据的子线程;②执行子线程任务,把要传递的数据发送给主线程;③在主线程接受到子线程传递回的消息时创建接收数据的子线程,然后把发送数据的子线程中返回的消息传递给接收数据的子线程;④执行接收数据子线程中的代码。

以上就是小编给咱们大家总结的HTML5的一些新特性。接下来,小编给咱们大家总结一下HTML5的优点,让我们再来感受一下HTML5的魅力吧!!!

HTML5作为新一代网络标准能够让程序通过Web浏览器,消费者从而能够从包括个人电脑、笔记本电脑、智能手机或平板电脑在内的任意终端访问相同的程序和基于云端的信息。HTML5允许程序通过Web浏览器运行,并且将视频等目前需要插件和其它平台才能使用的多媒体内容也纳入其中,这将使浏览器成为一种通用的平台,用户通过浏览器就能完成任务。此外,消费者还可以访问以远程方式存储在“云”中的各种内容,不受位置和设备的限制。由于HTML5技术中存在较为先进的本地存储技术,所以其能做到降低应用程序的响应时间为用户带来更便捷的体验。

好啦,今天小编就给大家分享到此,我们下期再见哈。