javascript:表单脚本

一:表单的基础知识

  •   在javascript中表单对应的HTMLFormElement类型,该类型有如下属性和方法:

  1)acceptCharset -- 服务器可接受的字符集

  2)action -- 接受请求的URL

  3)elements -- 表单内部所有元素的集合

  4)enctype -- 请求的编码类型

  5)length -- 表单中控件的数量

  6)method--HTTP请求的类型

  7)name -- 表单的名称

  8)target -- 用于发送请求和接受响应的窗口名称

  9)reset() -- 重置表单

  10)submit() -- 提交表单

  • 取得form元素引用的方法:

    1)getElementById方法

    2)document.forms[name], 取得页面中所有的表单,表单中有name特性

  • 提交表单

    1)点击提交按钮或图像按钮,提交表单, 触发submit事件

    input 和 button 的type特性为submit ,  input 的type特性为image

   2)表单调用方法submit(),不会触发submit事件

   提交表单可能出现的最大问题是重复提交,解决方法是一:第一次提交后禁用提交按钮,二:在onsubmit事件处理程序中取消后续的表单提交操作。

  • 重置表单

    1)重置按钮,type值为reset

    2) 调用表单的reset()方法

  • 表单字段(input button textarea fieldset)

  访问表单字段的方法:form的elements属性,返回一个列表,出现的顺序与字段在表单出现的先后顺序保持一致,通过位置或者字段的name特性访问。

    1)共有的表单字段属性(除fieldset)

      disabled -- 布尔值,禁用表单字段 

      form -- 拥有该字段的表单,不可修改,其他属性均可动态修改

      name -- 字段的名称

      value -- 字段要提交给服务器的值

      type -- 字段类型

      readonly -- 布尔值,字段是否只读 

    2)共有的表单字段方法

      focus() 方法---拥有焦点

      blur()方法 -- 失去焦点

    3) 共有的表单字段事件

      有鼠标、键盘、更改和HTML事件之外,还有以下三个事件:

      blur -- 失去焦点时触发

      change -- 对于input 和textarea 失去焦点且value值被改变时触发,select元素选项被改变时触发

      focus -- 获得焦点时触发

  •  文本框脚本

    一: 有两种方式表示文本框:一,input元素,type为text    二,textarea多行文本

    1)input单行文本

      属性有:size---可显示的字符数      value--可设置默认初始值

          maxlength -- 最多输入的字符数

    2)textarea多行文本

      属性有:rows    cols

    文本框输入的饿值都被保存在value 属性中。  

  二:选择文本

      1)select()方法,没有参数,选择文本框中所有的文本

     2)选择select事件,当选择文本框中的文本时会触发选择事件

    3)取得选择的文本

      方法一:HTML5中为文本框添加了两个属性selectionStart 和 selectionEnd,这两个属性均为数值,表示开始选择的字符位置和结束选择的字符位置

      例如:textbox为文本框,textbox.value.substring(selectionStart,selectionEnd) 

      方法二:HTML5中的方法setSelectionRange()

      textbox.setSelectionRange(开始位置,结束位置)

    IE8之前的选择文本方法,与上面讲到的不同。

三:过滤输入

  1)屏蔽输入

    有些文本框要求输入一定格式的字符,如要求输入非数值字符。在keypress事件中通过正则表达式判断用户的输入的字符,event对象的preventDefault取消事件的默认行为

  • 选择框脚本

  选择框是通过select - option元素创建的,javascript中选择框是属于HTMLSelectElement类型,该类型提供的属性和方法:

    1) add(newoption,reloption) -- 添加新的选项,在相关选项reloption之前

    2)multiple -- 布尔值,是否是多项选择

    3)options -- 所有<option>元素的集合

    4)remove(index) --移除index位置的选项

    5)selectedIndex -- 选中项中第一项的索引,多项选择只保存第一个选择项的位置

    6)size -- 选择框可见的行数

    7)type -- 两个值:select-one   或 select-multiple

  html中的option元素,在javascript中是用HTMLOptionElement对象表示。该对象提供的属性有:

     1)index -- 当前选项在options集合中的位置

    2)label -- 当前选项的标签,等同于html中的label特性

    3)selected -- 当前选项是否被选中

    4)text -- 选项的文本

    5)value -- 选项的值,等同于html的value特性  

  二:选择选项

     1) 单选选择框时,通过selectedIndex得到选择项,再通过option的text,value等属性获得更多地信息

    2) 多项选择时,可以通过option的selected 判断选项是否被选中

  三:添加选项

    三种方法:1)createElement方法  2) Option构造函数,该构造函数返回的是option元素,使用appendChild  3)使用选择框的add方法

  四:移除选项

    三种方法:1)removeChild方法  2)选择框的remove方法  3)将要移除的选项设置为null

  五:移除和重排选择

    appendchild方法  和  insertBefore方法

  • 表单序列化

  在javascript中使用表单的type属性,name属性和value属性实现表单的序列化。

  

funciton 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 = (optino.hasArrtibute('value')?option.value:option.text);
}
else{optValue = (option.attributes['value'].specified?option.value:option.text)}
parts.push(encodeURLComponent(field.name) + "=" + encodeURLComponent(optValue))

case "undefined"://fiedlset元素,没有type特性,未定义
case "file":
case "reset":
case "button":
break;
case "radio":
case "check":
if (!field.checked){break;}
default:
if(field.name.length){
parts.push(encodeURLComponent(field.name) + "=" + encodeURLComponent(optValue))
}   
}
}
}
}
}
return parts.join("&")
}

 

    

 

  

 

posted @ 2018-03-14 12:30  LittleGirl_MyBaby  阅读(208)  评论(0编辑  收藏  举报