JS高级程序设计14-表单脚本
来源:互联网 发布:linux 制作镜像 编辑:程序博客网 时间:2024/05/29 16:33
表单的基础知识(P412)
在JS中,表单对应的时HTMLFormElement类型,同时HTMLFormElement也继承了HTMLElement,除了与其他HTML元素具有相同默认的属性,HTMLFormElement额外的属性和方法:
acceptCharset--服务器能够处理的字符集;action--接受请求的URL;elements--表单中所有控件的集合;enctype--请求的编码类型;length--表单中控件的数量;method--要发送的HTTP请求类型,通常时“get”或"post";name:表单的名称;reset()--将所有表单域重置为默认值;submit()--提交表单;target--用于发送请求和接受相应的窗口名称//取得<form>元素引用的方式:var form=document.getElementById("form1");var firstForm=document.form[0]; //取得页面中的第一个表单var myForm=document.forms["form2"]; //取得页面中名称为"form2"的表单
提交表单(P413)
<input type="submit" value="Submit Form"> //通用提交按钮<button type="submit">Submit Form</button> //自定义提交按钮<input type="image" src="graphic.gif"> //图像按钮var form=document.getElementById("myForm");form.submit();//解决重复提交表单:在第一次提交表单后就禁用提交按钮;利用onsubmit事件处理程序取消后续的表单提交操作
重置表单(P414)
<input type="reset" value="reset Form"> //通用重置按钮<button type="reset">Reset Form</button> //自定义重置按钮var form=document.getElementById("myForm");form.reset();
表单字段(P414)
每个表单都有elements属性,该属性是表单中所有元素的集合;//表单字段共有的属性和方法:disabled--布尔值,表示当前字段是否被禁用;form--指向当前字段所属表单的指针;name--当前字段的名称;readOnly--布尔值,表示当前字段是否只读;tabindex--表示当前字段的切换序号;type--当前字段的类型;value--当前字段将被提交给服务器的值//除了form属性之外,JS可以动态修改其他任何属性var form=document.getElementById("myForm");var field=form.elements[0];field.value="Another value";//修改value属性alert(field.form===form); //检查form属性的值field.focus();//把焦点设置到当前字段field.disabled=true;//禁用当前字段field.type="checkboos";//修改type属性(不推荐)//共有的表单字段方法focus()--将焦点转移到某处设置autofocus属性也可以不使用JS就能自动把焦点移动到相应字段blur()--从元素中移走焦点//共有的表单字段事件blur--当前字段失去焦点时触发change--对于<input>和<textarea>元素,在它们失去焦点且value值改变时触发;对于<select>元素,在其选项改变时触发focus--当前字段获得焦点时触发;
文本框脚本(P419)
在HTML中,有和两种方式表现文本框
选择文本(P420)
select()--用于选择文本框中所有文本//使用select()使文本框在获得焦点时选择其所有文本EventUtil.addHandler(textbox,"focus",function(){ event=EventUtil.getEvent(event); var target=EventUtil.getTarget(event); target.select();});//选择(select)事件//取得选择的文本需要使用到selectionStart和selectionEnd两个属性function getSelectedText(textbox){ return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);}//选择部分文本setSelectionRange()方法
过滤输入(P422)
//屏蔽字符下面的代码屏蔽对非数字字符的输入,没有屏蔽上下按键、退格键、删除键、和ctrl键EventUtil.addHandler(textbox,"keypress",function(event){ event=EventUtil.getEvent(event); var target=EventUtil.getTarget(event); var charCode=EventUtil.getCharCode(event); if(!/\d/.test(String.fromCharCode(charCode))&&charCode>9&&!event.ctrlkey){ EventUtil.preventDefaule(event); }});//操作剪贴板6个剪贴板事件:beforecopy--在发生复制操作时触发;copy--在发生复制操作时触发;beforecut--在发生剪切操作前触发;cut--在发生剪切操作时触发beforepaste--在发生粘贴操作前触发paste--在发生粘贴操作时触发//要访问剪贴板中的数据,可以使用clipboardData对象为了兼容性,最好只在发生剪贴板事件期间使用clipboardData对象clipboardData对象有三个方法:getData()、setData()和clearData()getData()--用于从剪贴板取得数据,接受一个参数,即要取得的数据的格式;setData()--第一个参数时数据类型,第二个参数是要放在剪贴板中的文本;
自动切换焦点(P426)
<input type="text" name="tel1" id="txtTel1" maxlength="3"><input type="text" name="tel2" id="txtTel2" maxlength="3"><input type="text" name="tel3" id="txtTel3" maxlength="4">(function(){ function tabForward(event){ event=EventUtil.getEvent(event); var target=EventUtil.gettarget(event); if(target.value.length==target.maxLength){ var form=target.form; for(var i=0,len=form.elements.length;i<len;i++){ if(form.elements[i]==target){ if(form.elements[i+1]){ form.elements[i+1].focus(); } return; } } } } var textbox1=document.getElementById("txtTel1"); var textbox1=document.getElementById("txtTel2"); var textbox1=document.getElementById("txtTel3"); EcentUtil.addHandler(textbox1,"keyup",tabForward); EcentUtil.addHandler(textbox2,"keyup",tabForward); EcentUtil.addHandler(textbox3,"keyup",tabForward);})();
HTML5约束验证API(P427)
HTML5新增了一些即使JS被禁用也可以保证基本的验证的功能//必填字段任何标注required属性的字段,在提交表单时都不能空着;//其它输入类型HTML5为type属性新增加了几个值,"email"和"url"email--要求输入的文本必须符合电子邮件地址的模式url--要求输入的文本必须符合URL的模式//数值范围HTML5为type属性还新增了一些基于数字的值:"number"、"range"、"datetime"、"datetime-local"、"date"、"month"、"week"、"time"这些类型有两个方法:stepUp()和stepDown()//输入模式HTML5为文本字段新增了pattern属性:<input type="text" pattern="\d+" name="count">//检测有效性checkValidity()方法可以检测表单中的某个字段是否有效validity属性会告诉你为什么字段有效或无效:customError:如果设置了setCustomValidity(),则为true,否则返回false;patternMismatch:如果值与指定的pattern属性不匹配,返回true;rangeOverflow:如果值比max值大,返回true;rangeUnderflow:如果值比min值小,返回true;stepMisMatch:如果min和max之间的步长值不合理,返回true;tooLong:如果值的长度超过了maxlength属性指定的长度,返回true;typeMismatch:如果值不是"mail"或"url"要求的格式,返回true;valid:如果这里的其他属性都是false,返回true;valueMissing:如果标注为required的字段没有值,返回true。、//禁用验证通过设置novalidate(在<form>y=元素上使用),可以告诉表单不进行验证;如果一个表单有多个提交按钮,对其中的一个按钮添加formnovalidate属性,可以使相应的提交按钮不必验证表单
选择框脚本(P431)
选择框脚本时通过和元素创建的
//HTMLSelectElement类型另外提供的属性和方法:add(newOption,relOption)--向控件中插入新<option>元素,其位置在相关项之前;multiple--布尔值,表示是否允许多想选择;options--控件中所有<option>元素的HTMLCollection;remove(index)--移除给定位置的选项;selectedIndex--基于0的选中项的索引,如果没有选中项,则值为-1;size--选择框中可见的行数//HTMLOptionElement对象的属性:index--当前选项在options集合中的索引;label--当前选项的标签;selected--布尔值,表示当前选项是否被选中;text--选项的文本;value--选项的值
选择选项(P432 )
selectedIndex属性可以选择选中项
添加选项(P434)
方法一:var newOption=document.createElement("option");newOption.appendChild(document.createTextNode("Option text"));newOption.setAttribute("value","Option value");selectbox.appendChild(newOption);方法二:var newOption=new Option("Option text","Option value");selectbox.appendChild(newOption);方法三:var newOption=new Option("Option text","Option value");selectbox.add(newOption,undefined); //最佳方案
移除选项(P435)
方法一:selectbox.removeChild(selectbox,options[0]); //移除第一个选项方法二:selectbox.remove(0); 方法三:selectbox.option[0]=null;
移动和重排选项(P435)
var selectbox1=document.getElementById("selLocations1");var selectbox2=document.getElementById("selLocations2");selectbox2.appendChild(selectbox1.options[0]);(还有更好的方法)
表单序列化(P436)
Ajax的出现,使得表单序列化成为一种常见需求
function serialize(form){ var parts=[],field=null,i,len,j,optLen,option,optValue; 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,option=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("&");}
富文本编辑
富文本编辑介绍
使用<iframe>创建富文本编辑区域设置其designMode属性,可以使这个空白的HTML页面可以被编辑
使用contenteditable属性
contenteditable属性可以应用到页面中的任何元素,使相应的元素可以编辑,同样,也可以让富文本编辑区域可以编辑;
操作富文本
与富文本编辑器交互的主要方式,就是使用document.execCommand()方法;//转换粗体文本frames["richedit"].document.execCommand("bold",false,null);//转换斜体文本frames["richedit"].document.execCommand("italic",false,null);注:document.execCommand()方法不但适用于iframe区块,也适用于其他区块//queryCommandEnabled()方法可以检测当前富文本编辑器是否可以执行某个命令:var result=frames["richedit"].document.queryCommandEnabled("bold");//queryCommandState()方法用于确定是否已将指定命令应用到了选择的文本:var isBold=frames["richedit"].document.queryCommandState("bold");//queryCommandValue()用于取得执行命令时传入的值:var fontsize=frames["richedit"].document.queryCommandValue("fontsize");
富文本选区
在富文本编辑器中,使用框架(iframe)的getSelection()方法,可以确定实际选择的文本,并返回表示当前选择文本的selection对象;//selection对象的属性(略)var selection=frames["richedit"].getSelection();//取得选择的文本var selectedText=selection.toString();
表单与富文本
富文本编辑器不属于表单,需要手工来提取并提交HTML:在提交表单前,从iframe中提取出HTML,并将其插入到最近添加的隐藏的字段中EventUtil.addHandler(form,"submit",function(event){ event=EventUtil.getEvent(event); var target=EventUtil.getTarget(event); target.element['comments'].value=frames["richedit"].document.body.innerHTML;});//不仅仅是富文本,其他contenteditable元素也可以:EventUtil.addHandler(form,"submit",function(event){ event=EventUtil.getEvent(event); var target=EventUtil.getTarget(event); target.element['comments'].value=document.getElementById("richedit").innerHTML;});
0 0
- JS高级程序设计14-表单脚本
- JavaScript高级程序设计12--表单脚本
- js高级程序设计笔记9--表单
- JS高级程序设计16-HTML5脚本编程
- Javascript高级程序设计第二版第十三章--表单脚本--笔记
- 表单脚本——JavaScript高级程序设计笔记(11)
- web前端之JavaScript高级程序设计七:表单脚本
- js高级程序设计笔记11--HTML5脚本编程
- js高级程序设计
- Ext JS高级程序设计
- js 高级程序设计笔记
- JS高级程序设计_01
- JS高级程序设计_02
- JS高级程序设计_03
- 再读《js高级程序设计》
- JS高级程序设计-笔记
- 《JS高级程序设计》读书笔记
- js高级程序设计读书笔记
- Oracle学习笔记(7)-----------数据更新、事务处理、数据伪列
- 231 Power of Two
- synchronized 与 Lock 的异同
- 面试总结(一)——Java基础相关知识
- 周期串(数据小):字符串可以由长度为k的字符串重复得到,则k为周期。
- JS高级程序设计14-表单脚本
- 主機獲取不到ip的解決方法
- Java中遍历文件夹的2种方法
- Oracel学习笔记(8)----------复杂查询及总结
- mysql6.0 linux安装
- 采购全过程的科目处理
- android Notification简介
- 欢迎使用CSDN-markdown编辑器
- 网络编程