表单脚本 表单的基础知识
HTMLFormElement有自己独特的属性和方法
acceptCharset,服务器能够处理的字符集,等价于HTML中的accept-charset特性
action,接受请求的URL,等价于HTML中的action特性
elements,表单中所有控件的集合
enctype,请求的编码类型,等价于HTML中的enctype特性
length,表单中控件的数量
method,要发送的HTTP请求类型,通常是"get"或"post",等价于HTML的method特性
name,表单的名称,等价于HTML的name特性
reset(),将所有表单域重置为默认值
submit(),提交表单
target(),用于发送请求和接收响应的窗口名称,等级与HTML的target特性
提交表单
用户单击提交按钮或者图像按钮时,就会提交表单,使用或
阻止表单提交代码
var form=document.getElelemtById("myForm"); EventUtil.addHandler(form,"submit",function(event){ //取得事件对象 event=EventUtil.getEvent(event); //阻止默认事件 EventUtil.preventDefault(event); })
以编程方式提交表单,不会触发submit事件,因此调用方法之前要先验证表单数据
var form=document.getElementById("muForm"); //提交表单 form.submit();
提交表单时,可能出现最大的问题就是重复提交表单,在第一次提交表单之后,如果长时间没有反应,用户可能会反复单击提交按钮。解决办法两个,第一次提交之后就禁用提交按钮,或者利用onsubmit事件处理程序取消后续的表单提交操作
重置表单
在用户单击重置按钮时,表单会被重置,使用type特性值为reset的或
阻止重置表单的代码
var form = document.getElementById("myForm"); EventUtil.addHandler(form, "reset", function(event){ //取得事件对象 event = EventUtil.getEvent(event); //阻止表单重置 EventUtil.preventDefault(event); });
可以通过JavaScript来重置表单
var form=document.getElementById("myForm"); //重置表单 form.reset();
与调用submit()方法不同,调用submit方法会像单击按钮一样触发reset事件
表单字段
表单字段公有的属性
disabled,布尔值,表示当前字段是否被禁用
form,指向当前字段所属表单的指针。只读
name,当前字段的名称
readOnly,布尔值,表示当前字段是否只读
tabIndex,表示当前字段的切换序号
type,当前字段类型,如CheckBox
value当前字段将被提交给服务器的值
公有的表单字段方法
每个表单都有两个方法,focus()和blur(),其中focus()方法用于将浏览器的焦点设置到表单字段,即激活字段,使其可以响应键盘事件。在调用blur方法时,并不会把焦点转移到某个特定的元素上,仅仅是将焦点从调用这个方法的元素上移走
公有的表单字段事件
blur,当前字段失去焦点时触发
change,对于input和textarea元素,在失去焦点且value值改变时触发,对于select元素,在选择选项时触发
focus,当前字段获得焦点时触发
var textbox = document.forms[0].elements[0]; EventUtil.addHandler(textbox, "focus", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (target.style.backgroundColor != "red"){ target.style.backgroundColor = "yellow"; } }); EventUtil.addHandler(textbox, "blur", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (/[^d]/.test(target.value)){ target.style.backgroundColor = "red"; } else { target.style.backgroundColor = ""; } }); EventUtil.addHandler(textbox, "change", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (/[^d]/.test(target.value)){ target.style.backgroundColor = "red"; } else { target.style.backgroundColor = ""; } })文本框脚本
两种方式来表示文本框,input和textarea
选择文本两种文本框都支持select()方法,与select()方法对应的是一个select事件,选择文本框中的文本时,就会触发select事件
添加两个属性:selectionStart和selectionEnd,保存的是基于0的数值,表示选择文本的范围
所有文本框都有一个setSelectionRange()方法,接收两个参数:要选择的第一个字符的索引和要选择的最后一个字符之后的字符的索引
textbox.value = "Hello world!" //选择所有文本 textbox.setSelectionRange(0, textbox.value.length); //"Hello world!" //选择前 3 个字符 textbox.setSelectionRange(0, 3); //"Hel" //选择第 4 到第 6 个字符 textbox.setSelectionRange(4, 7); //"o w"过滤输入
剪切板事件
beforecopy,在发生复制操作前触发
copy,在发生复制操作时触发
beforecut,在发生剪切操作前触发
cut,在发生剪切操作时触发
beforepaste,在发生粘贴操作前触发
paste,在发生粘贴操作时触发
自动切换焦点(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 textbox2 = document.getElementById("txtTel2"); var textbox3 = document.getElementById("txtTel3"); EventUtil.addHandler(textbox1, "keyup", tabForward); EventUtil.addHandler(textbox2, "keyup", tabForward); EventUtil.addHandler(textbox3, "keyup", tabForward); })();HTML5约束验证API
必填字段
指定required属性
其他输入类型
新增email和url等类型
数值范围
number,range,datetime,datetime-local,date,mouth,week,time等
输入模式
pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值
检测有效性
checkValidty()方法,检测表单汇总某个字段是否有效,所有表单字段都有这个方法,如果字段有效,返回true,反之返回false
if (document.forms[0].elements[0].checkValidity()){ //字段有效,继续 } else { //字段无效 }
customError,如果设置了setCustomValidity,则为true,否则为false
patternMismatch,如果值与指定的pattern属性不匹配,返回true
rangeOverflow,如果值比max值大,返回true
rangeUnderflow,如果值比min值小,返回true
stepMisMatch,如果max和min之间的步长值不合适,返回true
tooLong,如果值的长度超过了maxlength属性指定的长度,返回true
typeMismatch,如果值不是mail或url返回的格式,返回true
valid,如果这里的属性都是false,返回true
valueMissing,如果标注为required的字段中灭有值,返回true
通过设置novalidate属性,可以告诉表单不进行验证
选择框脚本
HTMLSelectElement类型提供的属性和方法
add(newOption, relOption),向控件中插入新
multiple,布尔值,表示是否允许多项选择;等价于 HTML 中的 multiple 特性。
options,控件中所有
remove(index),移除给定位置的选项。
selectedIndex,基于 0 的选中项的索引,如果没有选中项,则值为-1。对于支持多选的控件,只保存选中项中第一项的索引。
size,选择框中可见的行数;等价于 HTML 中的 size 特性
选择框的value属性由当前选中项决定,相应规则
如果没有选中的项,则选择框的 value 属性保存空字符串。
如果有一个选中项,而且该项的 value 特性已经在 HTML 中指定,则选择框的 value 属性等于选中项的 value 特性。即使 value 特性的值是空字符串,也同样遵循此条规则。
如果有一个选中项,但该项的 value 特性在 HTML 中未指定,则选择框的 value 属性等于该项的文本。
如果有多个选中项,则选择框的 value 属性将依据前两条规则取得第一个选中项的值。
为了便于访问数据,HTMLOptionElement对象添加下列属性
index,当前选项在option集合中的索引
label,当前选项的标签,等价于HTML中的label特性
selected,布尔值,表示当前选项是否被选中,将这个属性设置为true可以选中当前选项
text,选项的文本
value,选项的值,等价于HTML中的value特性
选择选项
对于只允许选择一项的选择框,访问选中项的最简单方式就是使用选择框的selectedIndex属性
var selectedOption=selectbox.opitons[selectbox,selectedIndex]添加选项
添加选项的方式有很多,第一种方式就是使用如下所示的DOM方法
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);//最佳方案移除选项
removeChild()方法,移除选项
selectbox.removeChild(selectbox.options[0]);//移除第一个选项
remove()方法,移除选项
selectbox.remove(0);//移除第一个选项
将相应的选项设置为null,移除选项
selectbox.options[0]=null;//移除第一个选项表单序列化
浏览器将数据发送给服务器
对表单字段的名称和值进行URL编码,使用&符分隔
不发送禁用的表单字段
只发送勾选的复选框和单选按钮
不发送type为"reset"和"button"的按钮
多选选择框中的每个选中的值多带带一个条目
在单击提交按钮提交表单的情况下,也会发送提交按钮,否则不发送提交按钮,也包括type为"image"的元素
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, 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("&"); }富文本编辑
富文本编辑,WYSIWYG(What You See Is What You Get)所见即所得
使用contenteditable
这个属性时由IE最早实现的,可以把contenteditable属性应用给页面中的任何元素,然后用户立即就可以编辑该元素。这种方法之所以受到欢迎,是因为它不需要iframe、空白页和JavaScript,之哟啊哦为元素设置contenteditable属性即可
操作富文本
与富文本编辑器交互的主要方式就是使用document.execCommand(),这个方法可以对文档执行预定义的命令,而且可以应用大多数格式,可以为document.execCommand()方法传递3个参数:要执行的命令名称、表示浏览器是否应该为当前命令提供用户界面的一个布尔值和执行命令必须的一个值,为了确保跨浏览器的兼容性,第二个参数应该始终设置为false,因为Firefox会在该参数为true时抛出错误
每个Selection对象的属性
anchorNode,选取起点所在的节点
anchorOffset,在到达选区起点位置之前跳过的anchorNode中的字符数量
focusNode,选区终点所在的节点
focusOffset,focusNode中包含在选区之内的字符数量
isCollapse,布尔值,表示选区的起点和终点是否重合
rangeCount,选区中包含的DOM范围的数量
对象的方法提供了更多信息,支持对选区的操作
addRange(range),将指定的 DOM 范围添加到选区中。
collapse(node, offset),将选区折叠到指定节点中的相应的文本偏移位置。
collapseToEnd(),将选区折叠到终点位置。
collapseToStart(),将选区折叠到起点位置。
containsNode(node),确定指定的节点是否包含在选区中。
deleteFromDocument(),从文档中删除选区中的文本,与document.execCommand("delete",false, null) 命令的结果相同。
extend(node, offset),通过将 focusNode 和 focusOffset 移动到指定的值来扩展选区。
getRangeAt(index),返回索引对应的选区中的 DOM 范围。
removeAllRanges(),从选区中移除所有 DOM 范围。实际上,这样会移除选区,因为选区中至少要有一个范围。
reomveRange(range),从选区中移除指定的 DOM 范围。
selectAllChildren(node),清除选区并选择指定节点的所有子节点。
toString(),返回选区所包含的文本内容。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/97918.html
摘要:简介简史诞生于年,当时主要负责表单的输入验证。实现一个完整的由三部分组成核心文档对象模型浏览器对象模型就是对实现该标准规定的各个方面内容的语言的描述。把整个页面映射为一个多层节点结构。由万维网联盟规划。主要目标是映射文档的结构。 JavaScript简介 JavaScript简史 JavaScript诞生于1995年,当时主要负责表单的输入验证。 如果没有表单验证的功能,填入信息之...
摘要:脚本编程跨文档消息传递跨文档消息传送,简称为,指的是来自不同域的页面间传递消息的核心是方法,在规范中,除了部分之外的其他部分也会提到这个方法名,但都是为了同一个目的,向另一个地方传递参数。第一个页面加载时为空 HTML5脚本编程 跨文档消息传递 跨文档消息传送,简称为XMD,指的是来自不同域的页面间传递消息 XMD的核心是postMessage()方法,在HTML5规范中,除了XDM...
摘要:在基于使用命名空间的文档求值时,需要使用对象。第四个参数的取值类型是下列常量之一,返回与表达式匹配的数据类型。,返回字符串值。这是最常用的结果类型。集合中节点的次序与它们在文档中的次序一致。 JavaScript与XML 浏览器对XML DOM的支持 DOM2级核心 在通过JavaScript处理XML时,通常只使用参数root,因为这个参数指定的是XML DOM文档元素的标签名 v...
摘要:能力检测无法精确地检测特定的浏览器和版本。用户代理检测通过检测用户代理字符串来识别浏览器。用户代理检测需要特殊的技巧,特别是要注意会隐瞒其用户代理字符串的情况。 客户端检测 能力检测 能力检测的目的不是识别特定的浏览器,而是识别浏览器的能力,采用这种方式不必顾忌特定的浏览器,只要确定浏览器支持的特定的能力,就能给出解决方案,检测基本模式 if(object.propertyInQu...
摘要:类型对象是的一个实例,表示整个页面,而且,对象是对象的一个属性,因此可以将其作为全局对象来访问。删除指定位置的行。创建创建创建第一行创建第二行将表格添加到文档主体中 DOM 节点层次 Node类型 DOM1级定义了一个Node接口,该接口将由DOM中的所有节点类型实现 节点类型由在Node类型中定义的12个数值常量来表示,任何节点类型必居其一 Node.ELEMENT_NODE(...
阅读 3048·2021-11-18 10:02
阅读 3314·2021-11-02 14:48
阅读 3383·2019-08-30 13:52
阅读 526·2019-08-29 17:10
阅读 2069·2019-08-29 12:53
阅读 1392·2019-08-29 12:53
阅读 1017·2019-08-29 12:25
阅读 2154·2019-08-29 12:17