表单字段

表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的

除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集合,该集合是一个有序列表,包含着所有的表单字段

这些元素在该集合中出现的顺序,与在文档中出现的顺序一致

在该集合中可以使用 name 和 在文档中的顺序 来对其中的元素进行索引

若有多个表单元素拥有相同的 Name,那么将会返回一个 nodelist 集合

以下方的HTML代码片段为例:

<form method = "post" id="myForm">
<ul>
<li><input type = "radio" name = "color" value = "red">Red</li>
<li><input type = "radio" name = "color" value = "green">Green</li>
<li><input type = "radio" name = "color" value = "blue">Blue</li>
</ul>
</form>

在上面这个简单的表单中,有三个单选按钮,他们的name都是“color”,如果我们访问  elements["color"]  将会返回一个 nodelist,包含上边代码中的 三个 input 元素

不过如果访问 elements[0] 将只会返回第一个 input 元素

共有的表单字段属性

除了<fieldset>元素之外,所有的表单字段都拥有一组公共相同的属性

由于 <input> 类型可以表示多种表单字段,因此有些属性只适用于部分表单字段,但仍有一些属性是所有字段所共有的

表单字段共有的属性如下:

  1. disabled:布尔值 表示当前的字段是否被禁用
  2. form:指向当前字段的所有表单属性
  3. name:当前字段的名称
  4. readOnly:布尔值,表示当前字段是否只读
  5. tabIndex:表示当前字段的切换(tab)序号
  6. type:当前字段的类型
  7. value:当前字段提交给服务器的值

以上属性中只有 form 是无法修改的

其它字段都可以通过 JavaScript 动态修改

对于上面属性中的 type 属性:

  • input 的 type 属性和其HTML特性的值一致
  • select 的值为 “select-one”
  • <select multiple> 的值为 "select-multiple"
  • button 的 type 属性和其HTML特性的值一致

例如上一篇文章提到的当用户提交请求后就禁用按钮,这一功能则可以通过以下代码实现:

var form = document.getElementById("myForm");// 获取表单元素

form.addEventlistener("submit",function(event){
var btn = event.target;// 获取触发提交事件的按钮 btn.disabled = true;// 禁用该按钮
},true)

需要注意的是:不要使用 click 事件来禁用按钮,因为不同的浏览器之间存在时差,即无法确定click事件禁用按钮时数据是否被发往服务器

共有的表单字段方法

所有的表单字段都拥有两个方法: focus() 和   blur()

其中 focus 方法用于将浏览器的焦点设置到表单字段,用以激活表单字段,使其可以响应表键盘事件

其中focus的主要用途有两种

  1. 用于当文档加载完成后将用户的注意力吸引到表单的特定位置
  2. 用于用户输入信息校验,即只有当用户的输入达到要求时才能改变焦点进行其它操作

对于第一种应用场景,我们只需要在文档的 load 事件完成之后,对我们希望的元素调用 focus 方法即可

而对于第二种应用场景也十分的简单,只需要在当我们校验检测不通过时又将焦点设置回原来的元素即可

此外,对于第一种应用场景 HTML5 提供了 autofous 特性用于实现这一效果:

<input type="text" autofocus>

在支持该特性的浏览器中当文档加载完成,焦点就会设置为上面的 input 元素

blur方法的作用与 focus 方法相反,将焦点从当前元素移除,但并不移动到某个特定元素

这个方法早期用于创建只读字段,即当触发获取焦点事件就调用 blur 方法将焦点移出该元素

共有的表单字段事件

除了支持基本的 鼠标、键盘、变动、HTML事件之外,所有的表单字段都支持以下三个事件:

  1. blur:当前字段失去焦点时触发
  2. change:对于 input、textarea 元素,当其失去焦点且value值被改变时触发,对于select元素改变选项时触发
  3. focus:当前字段获得焦点时触发

通常使用上述事件来改变用户界面,或者向用户给出视觉提示

其中change事件则常常用于验证用户输入

需要注意的地方在于:blur事件和change事件的关系并没有严格的规定,在某些浏览器中blur事件会先于change事件发生,而有些则恰恰相反

Javascript高级编程学习笔记(75)—— 表单(3)表单字段的更多相关文章

  1. Javascript高级编程学习笔记(74)—— 表单(2)表单提交及重置

    表单提交 表单的很大一部分作用就是帮助用户完成和服务器的交互 所以表单提交是表单中比较重要的部分 虽然现如今的大部分应用场景都使用 AJAX 的异步请求来代替表单,但是仍有部分操作需要使用表单来完成, ...

  2. JavaScript高级程序设计学习笔记第十四章--表单

    1.在 HTML 中,表单是由<form>元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型. HTMLFormElement 继承了 HT ...

  3. Javascript高级编程学习笔记(80)—— 表单(8)表单序列化

    表单序列化 随着 Ajax 的出现,表单序列化成为一种常见需求 以将表单信息序列化为查询字符串为例 我们可以利用表单的 type 属性,以及 name 和 value 实现对表单的序列化 序列化应满足 ...

  4. Javascript高级编程学习笔记(78)—— 表单(6)HTML约束验证API

    自动切换焦点 使用JS可以极大地提升表单的易用性 其中最常用的一种就是当用户填写完当前字段后焦点自动切换到下一个字段 以下方的HTML代码为例: <input type="text&q ...

  5. Javascript高级编程学习笔记(77)—— 表单(5)过滤输入

    在日常实践中,我们常常会需要用户按照某种规则输入数据 但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作 通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件 ...

  6. Javascript高级编程学习笔记(73)—— 表单(1)表单基础

    表单 JS最初的一个用途就是帮助服务器分担处理表单的责任 时至今日,虽然web应用以及JS都有了长足的发展,但是表单依然是现在web应用中比较重要的部分. 因为默认的表单控件很丑,所以有时候我们会使用 ...

  7. Javascript高级编程学习笔记(79)—— 表单(7)选择框脚本

    选择框脚本 选择框由<option>和<select>元素创建,为了方便选择框的交互,除了提供表单字段的公有方法之外 HTMLSelectElement 类型还提供下列特有的属 ...

  8. Javascript高级编程学习笔记(76)—— 表单(4)选择文本

    文本框脚本 在HTML中文本框有两种实现方式: <input> <textarea> 这两种实现方式虽然在多数情况下表现一致,但是两者之间仍存在许多重要区别 对于<inp ...

  9. Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表

    操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中 ...

随机推荐

  1. 《探索未知种族之osg类生物》目录

    精力有限,博客园不在更新<探索未知种族之osg类生物>.在这里列出所有文章目录(持续更新)有兴趣的同学可以看看. 探索未知种族之osg类生物[目录] 前序 探索未知种族之osg类生物--- ...

  2. 如何打开用eclipse没有.project文件的Java工程

    大概分为以下7个步骤,具体如下: 1.在你的eclipse下新建一个与你想要打开的源代码项目同名的一个项目(我这举例叫myweb). 2.在电脑磁盘中找到刚刚新建的项目,把它生成的.project文件 ...

  3. Mysql必知必会 第一章 了解SQL

    第一章 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库的定义:保存有组织的数据的容器 数据库软件不是数据库,而是DBMS 1.1.2 表 表(Table)的定义:某种特定类型数据的结 ...

  4. 解决Kettle与Kerberos集成问题

    本文目的:记录Kerberos环境下,通过Kettle将MySQL数据清洗到HDFS过程解决的2个问题,希望对大家有所帮助. Kettle版本:pdi-ce-7.1.0.0-12 1.在Kerbero ...

  5. C#获取文件夹下面的所有文件名

    String path = @"X:\xxx\xxx";   //第一种方法 var files = Directory.GetFiles(path, "*.txt&qu ...

  6. strncpy

    char* mstrncpy(char *dest, const char *src, size_t n){ size_t i; size_t j=n-; ; i < j && ...

  7. C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)

    一.思路:   1.excel是可以通过NPOI插入图片的: 2.C#通过NPOI生成饼状图: 3.把生成的饼状图以字节流的形式插入到表格 二.看代码: #region 生成饼图图例 /// < ...

  8. 做seo应该如何选择网站程序?

    网站程序:(具体网站案例,可在官网看到)绝大多数情况下,我们将做的网站有以下几种1.个人博客,推荐的程序Wordpress(php的程序,比较强大),Zblog(asp的程序,比较简单)2.门户网站( ...

  9. 《Linux就该这么学》第十天课程

    使用RAID与LVM磁盘阵列技术 有RAID 0,RAID 1,,RAID 5,RAID 1 0等,下面列举RAID的各个概况 1. RAID 0 RAID 0技术把多块物理硬盘设备(至少两块)通过硬 ...

  10. -1.记libgdx初次接触

    学习一门技术最难的是开发环境变量配置和工具配置,以下为我初次接触libgdx时遇到的问题 几个难点记录下 gradle 直接用下到本地,然后放到d盘,链接到就行(gradle-wrapper.prop ...