在HTML中,表单是由<form>元素来组成的。在js中,表单对应的则是HTMLFormElement类型。它和其他HTML元素一样具有相同的默认属性。下面是HTMLFormElement独有的属性和方法:
acceptCharset:服务器能够处理的字符集,等价于HTML的accept-charset特性
action:接收请求的URL,等价于HTML中的action特性。
elements:表单中所有控件的集合(HTMLCollection)
enctype:请求的编码类型
length:表单中控件的数量
method:要发送的HTTP请求类型,通常是get或post
name:表单的名称
reset():将所有表单域重置为默认值
submit():提交表单
 
获取表单引用的推荐方式
1.通过id属性过的
2.通过document.forms获取,在用name索引
 
提交表单的方式
1.用submit提交按钮提交
2.from.submit()提交,不会验证数据
3.ajax方式提交
 
重置表单
1.使用重置按钮reset
2.form.reset()
3.自定义的清空表单方式
 
表单字段
每个表单都有elements属性,该属性是表单中所有元素的集合。这个集合是一个有序表,其中包含着表单中的所有字段。下面是共有的表单字段属性:
disabled:布尔值,表示当前字段是否被禁用
form:指向当前字段所属表单的指针:只读
name:当前字段的名称
readOnly:布尔值,表示当前字段是否只读
tabIndex:表示当前字段的切换(tab)序号
type:当前字段的类型
value:当前字段被提交给服务器的值。对文件字段来说,这个属性是只读的,包含着文件在计算机中的路径。
致谢属性除了form意外,其他的字段都可以使用js动态修改。
共有的表单字段方法
focus():激活字段,使其可以响应键盘事件
blur():失去焦点,触发
在HTML5中,表单中新增加了autofocus属性,自动把焦点移动到相应字段。
共有的表单字段事件
除了支持鼠标键盘更改和HTML事件之外,所有的表单字段都支持下列3个事件:
blur,change,focus
 
文本框脚本
在HTML中,有两种方式来表现文本框:一种是使用input元素的单行文本,另一种是使用textarea的多行文本框。使用input方式,必须添加type,设置为“text”。通过设置size特性,可以指定文本框内能够显示的字符数。value属性可以设置文本框的初始值。maxlength特性则是用于指定文本框内可以接受的最大字符数。<textarea>可以指定cols和rows,确定大小。
上述两种文本框都支持select()方法,这个方法主要用于选择文本框中的所有文本。不接受任何参数。与这个方法对应的select事件,在选择了文本框中的文本时事件触发。
在获取文本内容上,可以使用以下代码获取:
textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);
选择部分文本的方法是setSelectionRange()方法。接收两个参数:要选择第一个字符的索引和最后一个字符的索引。要调用setSelectionRange()之前或之后立即将焦点设置到文本框。而IE中使用的方式是适用范围来解决文本的问题。
 
操作剪贴板
以下是6个剪贴板事件
beforecopy:在发生复制操作前触发
copy:在发生复制时触发
beforecut:在发生剪贴前操作
cut:在发生加贴时操作
beforepaste:在发生黏贴操作前触发
paste:在发生黏贴操作时触发
要访问剪贴板中的数据,可以使用clipboardData对象,在IE中,这个对象是window对象的属性,在friefox,safari和chrome,这个对象是相应event对象的属性。这个clipboardData对象有三个方法:getData(),setData(),clearData()。它接收一个参数,即要取得数据的格式。IE中:有两种数据格式,“text”,"URL".在friefox,safari和chrome中,这个参数是一种MIME类型,不过可以用“text”代表“text/plain”.下面是获取剪贴板数据的方法:
getClipboardText:function(event){
   var clipboardData=(event.clipboardData||window.clipboardData);
   return clipboardData.getData("text");
}
 
setClipboardText:function(event,value){
   if(event.clipboardData){
   return event.clipboardData.setData("text/plain",value);
   }else if(window.clipboardData){
   return window.clipboardData.setData("text",value);    
   }
}
将这两个方法放到EventUtil对象中。
 
另外,考虑易用性,可以使用自动换焦的方式来处理文本输入。
 
HTML5约束验证API
下面的功能只有支持HTML5的浏览器才会支持。
1.必填约束字段
在必填字段中添加属性required。它适用于<input>,<textarea>,<select>字段。
使用下面的代码可以检测浏览器是否支持required属性:
var isRequiredSupported="required" in document.createElement("input");
2.其他输入类型
为type增加了几个值,这些值能反映数据类型的信息,而且还能提供一些默认的验证。其中,“email”和“url”是两个得到支持最多的类型,各浏览器也都为它们增加了定制的验证机制。
var isEamilSupported=(document.createElement("input").type=="email");
3.数值范围
除了“email”和“URL”,HTML5还定义了另外几个输入元素。这几个元素都要求填写基于数字的值:“number”,“range”,“datetime”,“datetime-local”,“date”,“mouth”,“week”,“time”。目前浏览器对这些类型支持并不好,如果真想使用的话要小心。对这事数值类型的输入元素可以指定min属性,max属性,step属性。同时这些数值类型元素还有两个方法:stepUp(),stepDown()。都接受一个参数,要在当前基础上加上或减去的数值。
4.输入模式
HTML5新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值。
可以使用以下代码来检测浏览器是否支持pattern属性:
var isPatternSupported="pattern" in document.createElement("input");
5检测有效性
使用checkValidity()方法可以检测表单中的字段是否有效。所有表单的字段都有这个方法,如果检查有效返回true。
input的validity属性会给出什么字段有效和无效的具体信息。
6.禁用验证
通过设置表单的novalidate属性,可以是表单不进行验证。用js获取form之后,设置它的novalidate属性为true,会禁用表单验证。
 
选择框文本
选择框通过<select>和<option>元素创建的。除了共有的属性和方法外,下面的是特有的属性和方法:
add(newOption,relativeOption):向控件中插入新<option>元素,其位置相关项relativeOption之前
multiple:布尔值,表示是否允许多项选择,等价于HTML的multiple特性
options:控件中所有<option>元素的HTMLCollection
remove(index):移除给定位置的选项
selectedIndex:基于0的选中项的索引,如果没有选中项的索引,则值为“-1”。
size:选择框中的可见行数,等价于HTML的size特性。
在DOM中,每个<option>元素都有一个HTMLOptionElement对象表示。为了便于访问,HTMLOptionElement对象添加了下列属性:
index:当前项在option集合中的索引
label:当前选项的标签,等价于HTML中的label标签
selected:布尔值,表示当前选项是否被选中。将这个属性设置为true可以选中当前选项
text:选项的文本
value:选项的值,等价于HTML的value特性。
注意:选择框的change事件与其他表单字段的change事件触发的条件不一样,其他表单字段的change事件是在值被修改且焦点离开当前字段时触发而选择框的change事件只要选中了选项就会触发。
添加选项的方法
1.创建option的节点,添加option的属性,将节点添加到select节点下
2.直接添加属性方式创建节点
3.用add方式添加节点
移动和重排都要改变option元素的index。
 
表单序列化
表单序列化的准则:
1:对表单字段的名称和值进行URL编码,使用和号(&)分隔
2:不发送禁用的表单字段
3:只发送勾选的复选框和单选按钮
4:不发送type为“reset”和“button”的按钮
5:多选框中每个选中的值单独一个条目
6:在单击提交按钮提交表单的情况下,也会发送提交按钮。否则不发送提交按钮。也包括type为“image”的input元素
7:<select>元素的值,就是选中的<option>元素的value特性值
在表单序列化过程中,一般不包含任何按钮手段,因为结果字符串可能是通过其他方式提交的。除此之外的其他上述规则应该遵循,以下是实现表单序列化的代码:
function serialize(form){
  var parts=[],field=null,i,len,j,optLen,option,optionValue;
  for(i=0,len=form.elements.length;i<len;i++){
    field=form.elements[i];
switch(field.type){
  case "select-one":
  case "select-multiple":
         if(field.name.length){
for(j=0,optLen=field.options.length;j<optLen;j++){
option=field.options[j];
if(option.selected){
  optValue="";
  if(option.hasAttribute){
 optValue=(option.hasAttribute("value")?option.value:option.text);  
  }else{
 optValue=(option.attributes["value"].specified?option.value:option.text);  
  }
  parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(optValue));
}
}  
 }
 break;
   case undefined:
   case "file":
   case "submit":
   case "reset":
   case  "button":
         break;
   case "radio":
   case "checkbox":  if(!field.checked){break;}
   default: if(field.name.length){
         parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(field.value));
   }
}
  }
  return parts.join("&");
}
 
富文本编辑
富文本编辑又称WYSISWG(所见即所得)。这一项技术的本质,就是在页面中嵌入一个包含空HTML页面的iframe。通过设置designMode属性,这个空白的HTML页面可以被编辑,而编辑对象则是该页面<body>的HTML代码。designMode属性有两个可能的值:“off”默认值和“on”。在设置为“on”时,整个文档变得可编辑,然后就可以像使用文字处理软件一样。
 
使用contentededitable属性
把它应用到给页面中的任何元素,然后用户可以立即编辑该元素,不需要iframe,空白页和js,只要为元素设置contentededitable属性即可。
它的属性值有3个,true表示打开,false表示关闭,inhert表示从父元素那里继承。
 
操作富文本
与富文本编辑交互的方式,就是使用document.execCommand()。这个方法可以对文档执行预定义的命令,而且可以应用大多数格式。可以为document.execCommand()方法传递3个参数:要执行的命令名称,表示浏览器是否应该为当前命令提供用户界面的一个布尔值和执行命令必须的一个值(不需要值,可设为null)。为了保证浏览器兼容,需要设置第二个参数为false。
除了命令之外,还有一些与命令相关的方法。第一个方法是queryCommandEnabled(),可以检验是否可以针对当前选择的文本或者当前插入字符处所在的位置执行相应的命令。这个方法接收一个参数:即要检测的命令。如果允许返回true。
queryCommandState()方法用来确定是否已将指定的命令应用到了选择的文本。
queryCommandValue()方法用于取得执行命令时传入的值。
 
富文本选区
在富文本编辑器中,使用框架(iframe)的getSelection()方法,可以确定实际选择的文本。这个方法是window对象和document对象的属性,调用它返回一个表示当前选择文本的selection对象。
 
当富文本中存在表单时,表单是不能提交的,只能使用代码进行提交。

javascript 表单的更多相关文章

  1. 推荐几款很棒的 JavaScript 表单美化和验证插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  2. JavaScript表单处理(上)

    为了分担服务器处理表单的压力,JavaScript提供了一些解决方案,从而大大打破了处处依赖服务器的局面.  发文不易,转载请亲注明出处,谢谢! 一.表单介绍 在HTML中,表单是由<form& ...

  3. JavaScript表单提交四种方式

    总结JavaScript表单提交四种方式 <!DOCTYPE html> <html> <head> <title>JavaScript表单提交四种方式 ...

  4. JavaScript表单验证年龄

    JavaScript表单验证年龄,判断一个输入量是否符合年龄,通过正则表达式实现. //检查年龄 function isAge(str){ var mydate=new Date; var now=m ...

  5. 前端工具 - 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  6. 第一百二十二节,JavaScript表单处理

    JavaScript表单处理 学习要点: 1.表单介绍 2.文本框脚本 3.选择框脚本 为了分担服务器处理表单的压力,JavaScript提供了一些解决方案,从而大大打破了处处依赖服务器的局面. 一. ...

  7. JavaScript表单验证和正则表达式

    JavaScript表单验证 分为四类: 1.非空验证 常用于用户名等 2.相等验证 常用于验证两次输入的密码 3.范围验证 常用于年龄等 4.正则验证 用于手机号,邮箱号等 以下是实例: <! ...

  8. JavaScript表单

    JavaScript表单 这篇文章的主要目的是介绍表单相关的知识,如表单基础知识.文本框脚本相关用法.选择框脚本相关用法以及等知识.虽然在现代web开发中,很少会使用form默认行为提交表单数据,而是 ...

  9. 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  10. JavaScript 表单验证入门

    JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单 ...

随机推荐

  1. 安卓自定义组合控件--toolbar

    最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...

  2. Android Fragment 剖析

    1.Fragment如何产生?2.什么是Fragment Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后 ...

  3. GSD_WeiXin(高仿微信)应用源码

    高仿微信计划:已经实现功能 1.微信首页(cell侧滑编辑.下拉眼睛动画.下拉拍短视频.点击进入聊天详情界面) 2.通讯录(联系人字母排序.搜索界面) 3.发现(朋友圈) 4.我(界面) 待实现功能( ...

  4. css实现文本框和下拉框结合的案例

    html 代码部分 <div id="list-name-input" class="list-name-input"> <select ty ...

  5. AngularJS 系列 学习笔记 目录篇

    目录: AngularJS 系列 01 - HelloWorld和数据绑定 AngularJS 系列 02 - 模块 (持续更新)

  6. TFS 生成发布代理

    下载Agent 后,执行配置命令     参考 安装TFS(2015)工作组模式代理服务器(Agent)

  7. 机器指令翻译成 JavaScript —— No.5 指令变化

    上一篇,我们通过内置解释器的方案,解决任意跳转的问题.同时,也提到另一个问题:如果指令发生变化,又该如何应对. 指令自改 如果指令加载到 RAM 中,那就和普通数据一样,也是可以随意修改的.然而,对应 ...

  8. mono for android 读取网络远程图片

    布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...

  9. 在CentOS上构建.net自动化编译环境

             我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...

  10. ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始化.多语言.automapper自动注 ...