JavaScript基础笔记(十)表单脚本
表单脚本
一、表单基础知识
JavaScript中表单对应的是HTMLFormElement类型,该类型继承自HTMLElement类型。
通过document.forms可以获得所有表单元素,通过数值索引和name特性可以获得其中特定的表单。
一)提交表单
单击提交按钮或者图像按钮就可以提交表单。
三种方式:
<!--通用提交按钮-->
<input type='submit' value='submit value'> <!--自定义提交按钮-->
<button type='submit'>Submit value</button> <!--图像按钮-->
<input type='image' src='gra.png'>
只要表单中存在上述任何一种按钮,在按钮控件有焦点的情况下,按回车键即可提交表单。
以这种方式提交表单时,浏览器会将请求发送给服务器之前出发submit事件。
在JavaScript中,以编程方式调用submit()方法也可以提交表单。
var form = document.getElementById('myForm');
//提交表单
form.submit();
记住,以submit()方法提交表单不会触发submit事件。
避免重复提交表单方法:
1)第一次提交后禁用表单
2)利用onsubmit事件处理程序取消后续的表单提交操作。
三)重置表单
<!--通用重置按钮-->
<input type='reset' value='reset form'>
<!--自定义重置按钮-->
<button type='reset'>Reset Form</button>
用户单击重置按钮重置表单时会触发reset事件。
也可以通过JavaScript来重置表单:
form.reset();
与调用submit()方法不同,该方法会触发reset事件。
三)表单字段
var form = document.getElementById("form1");
//取得表单中的第一个字段
var field1 = form.elements[0];
//取得名为"textbox1"的字段
var field2 = form.elements["textbox1"];
//取得表单中包含的字段的数量
var fieldCount = form.elements.length;
1.共有的表单字段属性
disabled:布尔值,表示当前字段是否被禁用。
form:指向当前字段所属表单的指针;只读。
name:当前字段的名称。
readOnly:布尔值,表示当前字段是否只读。
tabIndex:表示当前字段的切换(tab)序号。
type:当前字段的类型,如"checkbox"、 "radio",等等。
value:当前字段将被提交给服务器的值。对文件字段来说,这个属性是只读的,包含着文件
在计算机中的路径。
除了 form 属性之外,可以通过 JavaScript 动态修改其他任何属性 :
var form = document.getElementById("myForm");
var field = form.elements[0];
//修改 value 属性
field.value = "Another value";
//检查 form 属性的值
alert(field.form === form); //true
//把焦点设置到当前字段
field.focus();
//禁用当前字段
field.disabled = true;
//修改 type 属性(不推荐,但对<input>来说是可行的)
field.type = "checkbox";
注意,当在一个type='submit'的按钮上设置click事件处理程序时,我们不能确定click事件和submit事件谁先会被触发。
2.共有的表单字段方法
1)focus()方法:用于将浏览器的焦点设置到表单字段
2)blur()方法,从元素中移走焦点。
3.共有的表单事件
所有表单字段都支持:
1)blur:当表单失去焦点时触发
2)change:对于<input> 和<textarea>元素,当它们失去焦点且value值发生改变时触发,对于<select>元素,在其选项改变时触发。
3)focus:当前字段获得焦点时触发
关于blur和change事件触发的顺序各个浏览器并不相同。
二、文本框脚本
要表现文本框,必须将<input>元素的 type 特性设置为"text"。而通过设置 size 特性,可以指
定文本框中能够显示的字符数。通过 value 特性,可以设置文本框的初始值,而 maxlength 特性则用
于指定文本框可以接受的最大字符数
相对而言,<textarea>元素则始终会呈现为一个多行文本框。要指定文本框的大小,可以使用 rows
和 cols 特性。其中, rows 特性指定的是文本框的字符行数,而 cols 特性指定的是文本框的字符列数
(类似于<inpu>元素的 size 特性)。与<input>元素不同, <textarea>的初始值必须要放在
<textarea>和</textarea>之间
另一个与<input>的区别在于,不能在 HTML 中给<textarea>指定最大字符数。
无论这两种文本框在标记中有什么区别,但它们都会将用户输入的内容保存在 value 属性中。可
以通过这个属性读取和设置文本框的值
我们建议读者像上面这样使用 value 属性读取或设置文本框的值,不建议使用标准的 DOM 方法。
原因很简单:对 value 属性所作的修改,不一定会反映在 DOM 中。因此,在处
理文本框的值时,最好不要使用 DOM 方法。
一)选择文本
1.select()方法:这个方法用于选择文本框中的所有文本。在调用 select()
方法时,大多数浏览器(Opera 除外)都会将焦点设置到文本框中。这个方法不接受参数,可以在任何
时候被调用 。
2.select事件:在选择了文本框中的文本时,就会触发 select
事件。不过,到底什么时候触发 select 事件,还会因浏览器而异 。在调用 select()方法时也
会触发 select 事件
3.获得选择的文本:
虽然通过 select 事件我们可以知道用户什么时候选择了文本,但仍然不知道用户选择了什么文本。
HTML5 通过一些扩展方案解决了这个问题,以便更顺利地取得选择的文本。该规范采取的办法是添加
两个属性: selectionStart 和 selectionEnd。这两个属性中保存的是基于 0 的数值,表示所选择
文本的范围(即文本选区开头和结尾的偏移量)
function getSelectedText(textbox){
return textbox.value.substring(textbox.selectionStart, textbox.selectionEnd);
}
IE8 及更早的版本中有一个 document.selection 对象,其中保存着用户在整个文档范围内选择
的文本信息;也就是说,无法确定用户选择的是页面中哪个部位的文本。不过,在与 select 事件一起
使用的时候,可以假定是用户选择了文本框中的文本,因而触发了该事件。要取得选择的文本,首先必
须创建一个范围 ,
4.选择部分文本
HTML5 也 为 选 择 文 本 框 中 的 部 分 文 本 提 供 了 解 决 方 案 , 即 最 早 由 Firefox 引 入 的
setSelectionRange()方法。现在除select()方法之外,所有文本框都有一个setSelectionRange()
方法。这个方法接收两个参数:要选择的第一个字符的索引和要选择的最后一个字符之后的字符的索引
要看到选择的文本,必须在调用 setSelectionRange()之前或之后立即将焦点设置到文本框。
IE选择部分文本:略
三、选择框脚本
选择框是通过<select>和<option>元素创建的。HTMLSelectElement的重要属性和方法:
1)add(new,old):向控件插入新的<option>元素,其位置在old项之前。
2)options:控件中所有<option>的HTMLCollection
3)remove(index):移除指定位置的<option>
4)selectedIndex:给予0的选中项索引。多选控件只保存第一项。
5)size:选择框可见行数
选择框的 type 属性不是"select-one",就是"select-multiple",这取决于 HTML 代码中有
没有 multiple 特性。选择框的 value 属性由当前选中项决定,相应规则如下。
如果没有选中的项,则选择框的 value 属性保存空字符串。
如果有一个选中项,而且该项的 value 特性已经在 HTML 中指定,则选择框的 value 属性等
于选中项的 value 特性。即使 value 特性的值是空字符串,也同样遵循此条规则。
如果有一个选中项,但该项的 value 特性在 HTML 中未指定,则选择框的 value 属性等于该
项的文本。
如果有多个选中项,则选择框的 value 属性将依据前两条规则取得第一个选中项的值
在DOM中,每个<option>元素都有一个HTMLOptionElement对象表示。该对象的重要属性:
1)index:当前选项在集合中的索引
2)selected:当前选项是否被选中
3)text:选项的文本
4)value:选项的值
一)选择选项
对于只允许选择一项的选择框,访问选中项的最简单方式,就是使用选择框的 selectedIndex 属 性:
var selectedOption = selectbox.options[selectbox.selectedIndex];
对于可以选择多项的选择框, selectedfIndex 属性就好像只允许选择一项一样。设置
selectedIndex 会导致取消以前的所有选项并选择指定的那一项,而读取 selectedIndex 则只会返
回选中项中第一项的索引值 。
另一种选择选项的方式,就是取得对某一项的引用,然后将其 selected 属性设置为 true。例如,
下面的代码会选中选择框中的第一项:
selectbox.options[0].selected = true;
与 selectedIndex 不同,在允许多选的选择框中设置选项的 selected 属性,不会取消对其他选中项
的选择,因而可以动态选中任意多个项。但是,如果是在单选选择框中,修改某个选项的 selected 属性则
会取消对其他选项的选择。需要注意的是,将 selected 属性设置为 false 对单选选择框没有影响 。
二)添加选项
方式一:
var newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("Option text"));
newOption.setAttribute("value", "Option value");
selectbox.appendChild(newOption);
方式二:使用option构造函数
var newOption = new Option("Option text", "Option value");
selectbox.appendChild(newOption); //在 IE8 及之前版本中有问题
方式三:使用选择框的add()方法
var newOption = new Option("Option text", "Option value");
selectbox.add(newOption, undefined); //最佳方案
如果你想将新选项添加到其他位置(不
是最后一个),就应该使用标准的 DOM 技术和 insertBefore()方法。
三)移除选项
方式一:removeChild()方法
方式二:选择框的remove()方法
方式三:将相应的选项设置为0
selectbox.options[0] = null; //移除第一个选项
四)移动和重排选项
活学活用appendChild()和insertBefore()方法
四、表单序列化
略
五、富文本编辑
略
JavaScript基础笔记(十)表单脚本的更多相关文章
- 《JavaScript高级程序设计》笔记:表单脚本(十四)
表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在JS中,表单对应的是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而 ...
- Vue学习计划基础笔记(五) - 表单输入绑定、组件基础
表单输入绑定.组件基础 目标: 熟练掌握vue中表单的处理方式 对之前学习的内容简单回顾一下,并写一个实例,学以致用(最好脱离文档) vue中表单的处理方式 vue中表单的处理使用了v-model指令 ...
- JS学习笔记7_表单脚本
1.获取表单及表单元素引用的方式 var mForm = document.forms[formName];获取表单引用 mForm.elements[elemName]获取表单元素,如有同名的,则得 ...
- JavaScript高级程序设计第14章表单脚本 (学习笔记)
第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有 ...
- 第一百六十节,封装库--JavaScript,ajax注册表单到数据库
封装库--JavaScript,ajax注册表单到数据库 效果图 前台js var biaodan = $().xu_lie_biao_dan($('form').sh_jd()); //序列化获取表 ...
- JavaScript基础笔记集合(转)
JavaScript基础笔记集合 JavaScript基础笔记集合 js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在&l ...
- 表单脚本api_contenteditable
<html> <head></head> <body> <form> <div contenteditable>ssadas&l ...
- Javascript中的Form表单知识点总结
Javascript中的Form表单知识点总结 在HTML中,表单是由form元素来表示的,但是在javascript中,表单则由HTMLFormElement类型,此元素继承了HTMLElement ...
- bootstrap基础学习【表单含按钮】(二)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- C和Java判断一个数字是否为素数
C: /* 素数: 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. */ # include <stdio. ...
- js获取url协议、url, 端口号等信息路由信息
以路径为 http://www.baidu.com 为例 console.log("location:"+window.location.href); >> &quo ...
- 饮冰三年-人工智能-Python-14Python基础之变量与函数
1:函数:函数是逻辑结构化和过程化的一种编程方法.函数即变量 #参数组:**字典 *列表 def test(x,*args): print(args); print(args[0]); print(& ...
- vue自定义指令directives使用及生命周期
生命周期 bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作. inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于docu ...
- PAT Basic 1073. 多选题常见计分法
题目内容 多选题常见计分法(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 批改多选题是比较麻烦的事情,有 ...
- hadoop集群运行jps命令以后Datanode节点未启动的解决办法
出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而da ...
- [转] linux学习第四十四篇:Nginx安装,Nginx默认虚拟主机,Nginx域名重定向
Nginx安装 进入存放源码包的目录: cd /usr/local/src 下载源码包: wget http://nginx.org/download/nginx-1.12.1.tar.gz 解压: ...
- MySql定期存档数据
# 创建归档表(只复制表结构和索引) CREATE TABLE Orders_2016 like Orders; # 删除归档表的所有索引(这样可以提高插入速度) # 以前的数据导入归档表 INSER ...
- vue-app开发入门
vue的中文文档在这里 1. 简单地引用vue.js 使用vue框架最简单的方式就是写一个HTML页面然后引用vue.js啦. 使用<script> 标签就可以将vue.js导入并且使用它 ...
- Busybox制作ARM(iTOP4412) 根文件系统
本记录来源与自身操作过程. 1.制作环境 PC环境:外部Winows8.1 内部则为vmware11+ubuntu12.04 嵌入式设备:iTOP4412 交叉工具:arm-none-linux-gn ...