HTML 5_CSS 3_JavaScript讲义(二)-HTML5表单相关元素和属性

(1).HTML原有的表单及表单控件

1.表单元素

<form>
action:表单提交到的地址
method:指定提交表单时发送何种类型的请求,如get(默认),post
enctype:对表单内容进行编码使用的字符集

  • application/x-www-form-urlencoded:默认编码方式
  • multipart/form-data:以二进制流的方式处理表单数据,如表单上传文件
  • text/plain:当表单的action属性值为mailto:URL的形式时使用这种编码方式比较简单,使用于通过表单发送数据

name:指定表单唯一的名称,建议和id值一致
target:指定使用何种方式打开目标URL


2.使用input元素

单行文本框type="text"
密码输入框type="password"
隐藏域type="hidden"
单选框type="radio"
复选框type="checkbox"
图像域type="image"
文件上传域type="file"
提交,重置,无动作按钮:type="submit","reset","button"
属性:
-checked
-disabled
-maxlength
-readonly
-size
-src:只有图像域可使用

<form action="http://www.crazyit.org" method="get">
    单行文本框:<input id="username" name="username" type="text" /><br />
    不能编辑的文本框:<input id="username2" name="username" type="text"
        readonly="readonly" /><br />
    密码框:<input id="password" name="password" type="password" /><br />
    隐藏域:<input id="hidden" name="hidden" type="hidden" /><br />
    第一组单选框:<br />
    <input id="color" name="color" type="radio" value="red"/>
    <input id="color2" name="color" type="radio" value="green" />
    <input id="color3" name="color" type="radio" value="blue"/><br />
    第二组单选框:<br />
    <input id="gender" name="gender" type="radio" value="male"/>
    <input id="gender2" name="gender" type="radio" value="female" /><br />
    两个复选框:<br />
    <input id="website" name="website" type="checkbox" 
        value="leegang.org" />
    <input id="website2" name="website" type="checkbox" 
        value="crazyit.org" /><br />
    文件上传域:<input id="file" name="file" type="file"/><br />
    图像域:<input type="image" src="images/wjc.gif" alt="疯狂Java联盟"/><br />
    下面是四个按钮:<br />
    <input id="ok" name="ok" type="submit" value="提交" />
    <input id="dis" name="dis" type="submit" value="提交"
        disabled="disabled" />
    <input id="cancel" name="cancel" type="reset" value="重填"/>
    <input id="no" name="no" type="button" value="无动作" />
</form>

表单控件效果


3.使用lable定义标签

<form action="http://www.crazyit.org" method="get">
    <label for="username">单行文本框:</label>
    <input id="username" name="username" type="text" /><br />
    <label>密码框:<input id="password" name="password" type="password" />
    </label><br />
    <input id='ok' type="submit" value="登录疯狂Java联盟" />
</form>
使用label生成标签


4.使用button定义按钮

<button>
属性:

  • disabled
  • name
  • type
  • value
<form action="http://www.crazyit.org" method="get">
    <button type="button"><b>提交</b></button><br />
    <button type="submit"><img src="images/wjc.gif" alt="crazyit.org"/>
        </button><br />
</form>
使用button生成的按钮


5.列表框和下拉菜单

<select>
属性:

  • disabled
  • multiple
  • size

<option> 定义列表框项或菜单项
属性:

  • disabled
  • selected
  • value

<optgroup>定义列表项或菜单项组

<form action="http://www.crazyit.org" method="post">
    下面是简单下拉菜单:<br />
    <select id="skills" name="skills">
        <option value="java">Java语言</option>
        <option value="c">C语言</option>
        <option value="ruby">Ruby语言</option>
    </select><br /><br /><br />
    下面是允许多选的列表框:<br />
    <select id="books" name="books" 
        multiple="multiple" size="4">
        <option value="java">疯狂Java讲义</option>
        <option value="android">疯狂Android讲义</option>
        <option value="ee">轻量级Java EE企业应用实战</option>
    </select><br />
    下面是允许多选的列表框:<br />
    <select id="leegang" name="leegang" 
        multiple="multiple" size="6">
        <optgroup label="疯狂Java体系图书">
            <option value="java" label="aaaaaaaa">疯狂Java讲义</option>
            <option value="android">疯狂Android讲义</option>
            <option value="ee">轻量级Java EE企业应用实战</option>
        </optgroup>
        <optgroup label="其他图书">
            <option value="struts">Struts 2.1权威指南</option>
            <option value="ror">RoR敏捷开发最佳实践</option>
        </optgroup>
    </select><br />
    <button type="submit"><b>提交</b></button><br />
</form>
下拉菜单和列表框


6.textarea定义文本域

属性:

  • cols:宽度
  • rows:高度
  • disabled
    -readonly
<form action="http://www.crazyit.org" method="post">
    简单多行文本域:<br />
    <textarea cols="20" rows="2"></textarea><br />
    只读的多行文本域:<br />
    <textarea cols="28" rows="4" readonly="readonly">
疯狂Java讲义
轻量级Java EE企业应用实战
    </textarea><br />
    <button type="submit"><b>提交</b></button><br />
</form>
多行文本域


(2).HTML5新增的属性和元素

1.HTML5为表单空间新增的属性

form属性:

<form id="addForm" action="add">
    物品名:<input type="text" name="name"/>
    <input type="submit" value="添加"/>
</form>
物品描述:<textarea name="desc" form="addForm"></textarea>

formaction属性:动态地让表单提交到不同的URL

<form method="post">
    用户名:<input type="text" name="name"/><br/>
    密码:<input type="password" name="name"/><br/>
    <input type="submit" value="注册" formaction="regist"/>
    <input type="submit" value="修改" formaction="login"/>
</form>

formXXX属性:
formenctype formmethod formtarget

<form method="post" action="pro">
    用户名:<input type="text" name="name"/><br/>
    密码:<input type="password" name="name"/><br/>
    <input type="submit" value="GET提交" formmethod="get"/>
    <input type="submit" value="POST提交" formmethod="post"/>
</form>

autofocus属性:自动获得焦点
placeholder属性:单行文本框和多行文本域的提示信息

<form method="post">
    用户名:<input type="text" name="name" placeholder="请输入用户名"/><br/>
    密码:<input type="password" name="name" placeholder="请输入密码"/><br/>
    <input type="submit" value="注册" formaction="regist"/>
    <input type="submit" value="修改" formaction="login"/>
</form>
使用placeholder指定的提示信息

list属性:

<form method="post" action="buy">
    请输入图书:<input type="text" name="name" list="books"/><br/>
    <input type="submit" value="购买"/>
</form>
<datalist id="books">
    <option value="java">疯狂Java讲义</option>
    <option value="ee">轻量级Java EE企业应用实战</option>
    <option value="android">疯狂Android讲义</option>
</datalist>
image.png

autocomplete属性:on-文本框下方显示下拉菜单 off-文本框下方不会显示下拉菜单

2.功能丰富的input元素

<form action="do">
type="color"的文本框:<br/><input name="color" type="color"/><p>
type="date"的文本框:<br/><input name="date" type="date"/><p>
type="time"的文本框:<br/><input name="time" type="time"/><p>
type="datetime"的文本框:<br/><input name="datetime" type="datetime"/><p>
type="datetime-local"的文本框:<br/><input name="datetime-local" type="datetime-local"/><p>
type="month"的文本框:<br/><input name="month" type="month"/><p>
type="time"的文本框:<br/><input name="time" type="time"/><p>
type="week"的文本框:<br/><input name="week" type="week"/><p>
type="email"的文本框:<br/><input name="email" type="email" multiple/><p>
type="tel"的文本框:<br/><input name="tel" type="tel"/><p>
type="url"的文本框:<br/><input name="url" type="url"/><p>
type="number"的文本框:<br/><input name="number" type="number"/><p>
type="range"的文本框:<br/><input name="range" type="range" min="0" max="100" step="5"/><p>
type="search"的文本框:<br/><input name="search" type="search"/><p>
<input value="提交" type="submit"/>
</form>

3.HTML5新增的表单控件

<output>
for

<form action="do">
    <input id="color1" name="color1" type="color"/>
    <output name="a" for="color1" onforminput="innerHTML=color1.value;"></output><p>
    <input id="range1" name="range1" type="range" min="0" max="100" step="5"/>
    <output name="b" for="range1" onforminput="innerHTML=range1.value;"></output><p>
    <input value="提交" type="submit"/>
</form>


(3).HTML5增强的文件上传域

1.FileList对象和File对象

HTML5为type="file"的<input>元素增加了两个属性

  • accept: 控制允许上传的文件类型
  • multiple: 设置允许选择多个文件
浏览图片:<input id="images" type="file" multiple accept="image/*"/>
<input type="button" value="显示文件" onclick="showDetails();"/>
<script type="text/javascript">
var showDetails = function()
{
    var imageEle = document.getElementById("images");
    // 获取文件上传域内输入的多个文件
    var fileList = imageEle.files;
    // 遍历每个文件
    for(var i = 0 ; i < fileList.length ; i ++)
    {
        var file = fileList[i];
        div = document.createElement("div");
        // 依次读取每个文件的文件名、文件类型、文件大小
        div.innerHTML = "第" + (i + 1) + "个文件的文件名是:" + file.name
            + ",该文件类型是:" + file.type
            + ",该文件大小为:" + file.size;
        // 把div元素添加到页面中。
        document.body.appendChild(div);
    }
}
</script>

2.使用FileReader读取文件内容

FileReader的方法

  • readAsText(file,encoding):以文本方式读取文件内容
  • readAsBinaryString(file):读取二进制文件
  • readAsDataURL(file):也可以读取二进制文件,但它返回的是该二进制文件编码成DataURL格式的字符串
  • abort() 停止读取
浏览文件:<input id="file1" type="file"/><br/>
<div id="result"></div>
<input type="button" value="读取文本文件" onclick="readText();"/><br/>
<input type="button" value="读取二进制文件" onclick="readBinary();"/><br/>
<input type="button" value="以DataURL方式读取" onclick="readURL();"/><br/>
<script type="text/javascript">
    var reader = null;
    // 如果浏览器支持FileReader对象
    if(FileReader)
    {
        reader = new FileReader();
    }
    // 如果浏览器不支持FileReader对象,弹出提示信息
    else
    {
        alert("浏览器暂不支持FileReader");
    }
    var readText = function()
    {
        // 通过正则表达式验证该文件是否为文本文件,
        // 如果用户选择的第一个文件是文本文件
        if(/text\/\w+/.test(document.getElementById("file1").files[0].type))
        {
            // 以文本文件的方式读取用户选择的第一个文件
            reader.readAsText(document.getElementById("file1").files[0] , "gbk");
            // 当reader读取数据完成时将会激发该函数
            reader.onload = function()
            {
                document.getElementById("result").innerHTML = reader.result;
            };
        }
        else
        {
            alert("你选择的文件不是文本文件!");
        }
    }
    var readBinary = function()
    {
        // 以二进制流的方式读取用户选择的第一个文件
        reader.readAsBinaryString(document.getElementById("file1").files[0]);
        // 当reader读取数据完成时将会激发该函数
        reader.onload = function()
        {
            document.getElementById("result").innerHTML = reader.result;
        };
    }
    var readURL = function()
    {
        // 以DataURL的方式读取用户选择的第一个文件
        reader.readAsDataURL(document.getElementById("file1").files[0]);
        // 当reader读取数据完成时将会激发该函数
        reader.onload = function()
        {
            document.getElementById("result").innerHTML = reader.result;
        };
    }
</script>

实时监控文件上传的进度

浏览文件:<input id="file1" type="file"/><br/>
上传进度:<progress id="pro" value="0"></progress>
<div id="result"></div>
<input type="button" value="读取二进制文件" onclick="readBinary();"/><br/>
<script type="text/javascript">
    var reader = null;
    // 如果浏览器支持FileReader对象
    if(FileReader)
    {
        reader = new FileReader();
    }
    // 如果浏览器不支持FileReader对象,弹出提示信息
    else
    {
        alert("浏览器暂不支持FileReader");
    }
    var readBinary = function()
    {
        // 以二进制流的方式读取用户选择的第一个文件
        reader.readAsBinaryString(document.getElementById("file1").files[0]);
        var pro = document.getElementById("pro");
        pro.max = document.getElementById("file1").files[0].size;
        // 当reader读取数据的过程中会不断激发该函数。
        reader.onprogress = function(evt)
        {
            pro.value = evt.loaded;
        };
    }
</script>


(4).HTML5新增的客户端校验

1.使用校验属性执行校验

required
pattern
min,max,step : 只对数值类型和日期类型的<input>有效

<form action="add">
    图书名:<input name="name" type="text" required/><br/>
    图书ISBN:<input name="isbn" type="text"
        required pattern="\d{3}-\d-\d{3}-\d{5}"/><br/>
    图书价格:<input name="price" type="number" 
        min="20" max="150" step="5"/><br/>
    <input type="submit" value="提交"/>
</form>


2.调用checkValidity方法进行校验

<form action="add">
    生日:<input id="birth" name="birth" type="date"/><br/>
    邮件地址:<input id="email" name="email" type="email"/><br/>
    <input type="submit" value="提交" onclick="return check();"/>
</form>
<script type="text/javascript">
    var check = function()
    {
        return commonCheck("birth" , "生日" , "字段必须是有效的日期!")
            && commonCheck("email" , "邮件地址" , "字段必须符合电子邮件的格式!");
    }
    var commonCheck = function(field , fieldName , tip)
    {
        var targetEle = document.getElementById(field);
        // 如果该字段的值为空
        if (targetEle.value.trim() == "")
        {
            alert(fieldName + "字段必须填写!");
            return false;
        }
        // 调用checkValidity()方法执行输入校验
        else if(!targetEle.checkValidity())
        {
            alert(fieldName + tip);
            return false;
        }
        return true;
    }
</script>


3.自定义错误提示

通过setCustomValidity()方法来定制错误提示

<form action="add">
    图书名:<input id="name" name="name" type="text" required/><br/>
    图书ISBN:<input id="isbn" name="isbn" type="text"
        required pattern="\d{3}-\d-\d{3}-\d{5}"/><br/>
    图书价格:<input id="price" name="price" type="number" 
        min="20" max="150" step="5"/><br/>
    <input type="submit" value="提交" onclick="check();"/>
</form>
<script type="text/javascript">
    var check = function()
    {
        if(!document.getElementById("name").checkValidity())
        {
            document.getElementById("name").setCustomValidity("图书名是必填的!");
        }
        if(!document.getElementById("isbn").checkValidity())
        {
            document.getElementById("isbn").setCustomValidity("图书ISBN必须填写,"
                + "\n而且必须符合xxx-x-xxx-xxxxx的格式(其中x代表数字)。");
        }
        if(!document.getElementById("price").checkValidity())
        {
            document.getElementById("price").setCustomValidity("图书价格必须填写,"
                + "\n而且必须在20~150之间,且是5的倍数。");
        }
    };
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 接上 关于HTML/HTML5(一)http://www.jianshu.com/p/33fc7840c079 学...
    Amyyy_阅读 789评论 0 4
  • 学习HTML的最佳网站没有之一http://www.w3school.com.cn/html/ 关于HTML/HT...
    Amyyy_阅读 2,067评论 0 16
  • 表单基础知识 在HTML中,表单是由 元素来表示的,而在JS中,表单对应的则是HTMLFormElement类型。...
    oWSQo阅读 908评论 0 1
  • 在来美国之前,有若干种家务我是绝对不会自己干的,其中首当其冲的就是烫衣。原因很简单:我离开对服装鲜亮程度有要求的行...
    曲奇的旅行箱阅读 881评论 0 0
  • 朋友 今夜举起你手中的酒杯 音乐还没停呢 让我们围着炙热的篝火 一起跳舞 歌唱 说话 今夜我们有酒 有肉 还有故...
    时光屿歌阅读 522评论 0 0