JavaScript表单脚本

注意关注HTML5在表单方面新增的许多属性和事件

JavaScript较早的用途之一:服务器端表单处理的责任,即表单验证
web表单在HTML以< form >元素存在,JavaScript中HTMLFormElement类型(继承自HTMLElement)

JavaScript

HTMLFormElement类

  • acceptCharset:服务器可以接收的字符集
  • action:请求的URL
<form action="/mail.php">处理表单的程序、脚本的位置
    php、asp、aspx、jsp、python、ruby等语言都可以
</form>
  • elements:表单中所有控件的HTMLCollection
  • enctype:请求的编码类型
  • length:表单中控件的数量
  • method:HTTP请求的方法
  • name:表单的名称
  • reset():把表单字段重置为各自的默认值
  • submit():提交表单
  • target:用于发送请求和接收响应的窗口的名字

HTML中基本都有对应元素属性

JS获取对< form >元素的引用的方法
赋予id后getElementById(“id”);
document.forms集合获取页面上所有表单的集合,然后还可以用数字索引或者name(同名则返回集合)来访问特定表单
document.form[“formname”];
document.form[“formname”].elements["控件名“];//表单内部的控件也能通过这样的方式访问

<body>
    <form action=" ">
        <input type="file" id="file" /><br/>
        <input tpe="button" value="显示文件信息" onclick="show();"/><br/>
        文件字节长度:<span id="size"></span>

    </form>

    <script>
       function show(){
           var file=document.getElementById("file").files[0];
           alert("name:"+file.name);
           var size=document.getElementById("size");
           size.innerHTML=file.size;
           console.log(file.size);
       }
    </script>
</body>

表单字段

即表单内部的控件

除了< fieldset > 以外,所有表单字段的公共属性和方法,JavaScript可以动态修改其来增强标准表单控件的默认行为。
属性:

  • disabled:布尔值,是否禁用.(提交之后禁用提交按钮防止多次提交),禁用字段不会提交
  • form:指针,只读,指向表单
  • name
  • readOnly:该字段是都只读
  • type:
  • value:要交给服务器的字段值
  • tabIndex:按Tab键时的切换顺序???

方法:
focus()把浏览器焦点设置到表单字段,该字段会变成活动字段并可以响应键盘事件

注意:字段被CSS属性display或者visibility隐藏时容易出错,所以HTML5为表单字段增加了autofocus属性,支持的浏览器会自动为带有该属性的元素设置焦点。

<input type="text" autofocus>

blur()移除焦点
change() :
在input、textarea元素的value发生变化且失去焦点时、< select >元素中选中项变化时触发
不同元素触发契机不同

HTML

表单提交按钮

表单时通过用户点击提交按钮、或者图片按钮来提交
提交按钮:
type=“submit” 的input、button元素
type=“image” 的input元素

焦点+回车==点击

会在向服务器发送请求前触发submit事件,这样就提供了一个表单验证的机会,在submit事件上注册事件处理程序。
重置表单
type=“reset” 的input、button元素

表单设计中通常不提倡重置表单,没有这个需求,通常是让用户点击返回前一步

提交事件js

以上述方式提交表单时,浏览器会在请求发送给服务器之前,触发submit事件。
可以验证表单数据,并且决定是否允许表单提交。组织这个事件的默认行为就可以阻止表单的提交

var form = document.getElementById("myForm");
EventUtil.addHandler(form, "submit", function(event){
    event = EventUtil.getEvent(event);
    EventUtil.preventDefault(event);
});

又或者无需按钮触发,自动提交

var form = document.getElementById("myForm");
//提交表单
form.submit();

HTML5约束验证API

  • 必填字段,添加属性required
<input type="text" name="username" required>
 let isRequired=document.forms[0].elements["username"].required;//检测是否必须
  • 更多输入类型,默认验证
    range、search、tel、time、url、week
 <input type="email" name="email">
 <input type="url" name="homepage">
  • 数值范围

  • 输入模式
    pattern属性添加匹配的正则表达式

  • 检测有效性
    checkValidity()和validity属性

  • 禁用验证
    给提交按钮的属性

文本框编程

单行使用input 默认type=“text”
size文本框宽度的字符数

<input  type="text"   size="25" maxlength="50" value="dddd">

多行使用textarea

<textarea rows="3" cols="20"> </textarea>

选择文本
两种文本框都支持select()方法选中文本框中的文本

输入过滤
文本框默认没有过滤功能,要通过JavaScript来实现过滤

编码
enctype 有三个属性值,规定在发送到服务器之前应该如何对表单数据进行编码。
改为formenctype属性
默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)。

formaction:重写表单action属性
formenctype:重写表单enctype属性
formmethod:重写表单method属性
formnovalidate:重写表单novalidate属性
formtarget:重写表单target属性

  • 屏蔽字符
//keypress一般只有在键入字符键的时候才会触发
 textbox.addEventListener("keypress",(event)=>{
	if(!/\d/.test(String.fromCharCode(event.charCode))){
		event.preventDefault();//非数字输入
	}
	//正则表达式/\d/匹配所有的数字字符 /\d/.test
});

上述代码忽略了快捷键的使用,复制黏贴
增加条件

if(!/\d/.test(String.fromCharCode(event.charCode))&&!event.ctrlKey){
}
  • 处理剪贴板

大多数浏览器支持剪贴板相关事件及通过JavaScript访问剪贴板数据的浏览器。

剪贴板事件
beforecopy:
copy:
beforecut:
cut:
beforepaste:
paste:

剪贴板数据可以通过window(IE)、event上的clipboardData(其他大多浏览器)

clipboardData.getData();
clipboardData.setData();
clipboardData.clearData();
  • 自动切换

JavaScript可以通过很多方式来增强表单字段的易用性
最常见的是在当前字段完成时自动切换到下一个字段。对于要收集已知长度的字段。
可以在每个文本框输入到最大自动把焦点切换到下一个文本框。

选择框编程

元素 < select >和< option >

<select id="mySelect">
	<option value="a">Apple</option>
	<option value="o">Orange</option>
	<option value="p">Pineapple</option>
	<option>Banana</option>
</select>
 

option属性:

index:选项在options中的索引
label:
selected:
text:
value:选项的值,无则空字符串

选项处理
单项选择的时候select有selectedIndex
多项选择,遍历selected属性

可以用JavaScript实现动态添加新的选择,删除旧的选择

select.appendChild(new Option("text","value"));
select.removeChild(0);//索引值

表单序列化
表单可以使用表单字段的type、name、value属性进行序列化
serialize();//返回查询字符串格式,返回其他格式可以适当修改

富文本编辑

添加

designMode 属性
off(默认)
on:嵌入一个iframe,可以编辑

添加一个contenteditable属性
true
false
inherit

交互

JavaScript通过execCommand()传入一些浏览器支持的既定命令,与其交互
通过元素框innerHTML属性来获取富文本实现表单提交富文本。

文件选择器

Web表单不仅能收集数据,还能用于传送来自用户硬盘的外部文档

<input type=file>

控件跟操作系统有关

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值