元素的 type 属性则是只读的。
2、focus() 和 blur()
focus() 方法用于将浏览器的焦点设置到表单字段上。 blur() 方法把焦点移走。
HTML5中新增一个 autofocus 属性。自动吧焦点设置到相应的字段。
1 <input type="text" autofocus>
3、共有的字段事件
除了支持鼠标、键盘、更改和HTML事件之外,所有表单字段都支持下列3个事件。
文本框脚本 \ 单行文本框
size特性:指定文本框中能够显示的字符数。
value特性:设置文本框的初值。
maxlength 特性:指定文本框可以接受的最大字符数。
1 <input type="text" size="25" maxlength="50" value="aqingya" >
\
rows:指定文本框中的字符行数
cols:指定文本框中的字符列数
1、选择文本 select() 方法:用于选择文本框中的所有文本。\和\
1 2 3 4 5 EventUtil.addHandler(textbox, "focus" , function (event ) { event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); target.select(); });
1、选择(select)事件
选择文本框中的文本就会触发该事件。
1 2 3 4 var textbox = document .forms[0 ].elements["textbox1" ];EventUtil.addHandler(textbox, "select" , function (event ) { var alert("Text selected" + textbox.value);});
2、取得选择的文本
通过select 事件我们知道用户什么时候选择了文本,但是不知道选择了什么样的文本。 两个属性:selectionStart 和selectionEnd 表示选择文本的范围(文本的开头和结尾)
兼容IE8及更早的版本中有一个document. selection对象。
1 2 3 4 5 6 7 function getSelectedText (textbox ) { if (typeof textbox.selectionStart == "number" ) { return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd); } else if (document .selection) { return document .selection.createRange().text; } }
3、选择部分文本
setSelectionRange() 方法,这个方法接收两个参数:要选择的第一个字符的索引和要 选择的最后一个字符之后的字符的索引(类似于substring()方法的两个参数)。
1 2 3 4 5 6 7 textbox.value = "Hello world!" textbox.setSelectionRange(0 , textbox.value.length); textbox.setSelectionRange(0 , 3 ); textbox.setSelectionRange(4 , 7 );
兼容IE8 createTextRange() 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 textbox.value = "Hello world!" ; var range = textbox.createTextRange();range.collapse(true ); range.moveStart("character" , 0 ); range.moveEnd("character" , textbox.value.length); range.select(); range.collapse(true ); range.moveStart("character" , 0 ); range.moveEnd("character" , 3 ); range.select(); range.collapse(true ); range.moveStart("character" , 4 ); range.moveEnd("character" , 3 ); range.select();
跨浏览器方法
1 2 3 4 5 6 7 8 9 10 11 12 function selectText (textbox, startIndex, stopIndex ) { if (textbox.setSelectionRange) { textbox.setSelectionRange(startIndex, stopIndex); } else if (textbox.createTextRange) { var range = textbox.createTextRange(); range.collapse(true ); range.moveStart("character" , startIndex); range.moveEnd("character" , stopIndex - startIndex); range.select(); } textbox.focus(); }
1 2 3 4 5 6 7 textbox.value = "Hello world!" selectText(textbox, 0 , textbox.value.length); selectText(textbox, 0 , 3 ); selectText(textbox, 4 , 7 );
2、过滤输入 1、屏蔽字符
响应文本输入框中插入字符操作的是keypress 事件。
1 2 3 4 5 6 7 8 9 10 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.preventDefault(event); } });
2、操作剪切板
剪切板事件
beforecopy:在发生复制操作前触发。
copy :在发生复制操作时触发。
beforecut:在发生剪切操作前触发。
cut :在发生剪切操作时触发。
be forepaste:在发生粘贴操作前触发。
paste:在发生粘贴操作时触发。
向EventUtil中添加方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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); } },
在需要确保粘贴到文本框中的文本中包含某些字符,或者符合某种格式要求时,能够访问剪贴板是非常有用的。例如,如果一个文本框只接受数值,那么就必须检测粘贴过来的值,以确保有效。在paste事件中,可以确定剪贴板中的值是否有效,如果无效,就可以像下面示例中那样,取消默认的行为。
1 2 3 4 5 6 7 EventUtil.addHandler(textbox, "paste" , function (event ) { event = EventUtil.getEvent(event); var text = EventUtil.getClipboardText(event); if (!/^\d*$/ .test(text)) { EventUtil.preventDefault(event); } });
到目前EventUtil 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 var EventUtil = { addHandler : function (element, type, handler ) { if (element.addEventListener) { element.addEventListener(type, handler, false ); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } }, getEvent : function (event ) { return event ? event : window .event; }, getTarget : function (event ) { return event.target || event.srcElement; }, preventDefault : function (event ) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false ; } }, removeHandler : function (element, type, handler ) { if (element.removeEventListener) { element.removeEventListener(type, handler, false ); } else if (element.detachEvent) { element.detachEvent("on" + type, handler); } else { element["on" + type] = null ; } }, getRelatedTarget : function (event ) { if (event.relatedTarget) { return event.relatedTarget; } else if (event.toElement) { return event.toElement; } else if (event.fromElement) { return event.fromElement; } else { return null ; } }, getButton : function (event ) { if (document .implementation.hasFeature("MouseEvents" , "2.0" )) { return event.button; } else { switch (event.button) { case 0 : case 1 : case 3 : case 5 : case 7 : return 0 ; case 2 : case 6 : return 2 ; case 4 : return 1 ; } } }, getWheelDelta : function (event ) { if (event.wheelDelta) { return (client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta); } else { return -event.detail * 40 ; } }, getCharCode : function (event ) { if (typeof event.charCode == "number" ) { return event.charCode; } else { return event.keyCode; } }, 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); } }, stopPropagation : function (event ) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true ; } } };
4、HTML5 约束验证API 1、必填字段
required 属性:带有required 属性的字段必须填。
1 <input type="text" name="username" required>
2、其他输入类型
1 2 <input type="email" name ="email" > <input type ="url" name ="homepage" >
3、数值范围
比如想让用户只能输入 0 到 100 的值,而且还是5的倍数。·1 <input type="number" min="0" max="100" step="5" name="count" >
4、输入模式
pattern 属性:这个属性的值的一个正则表达式。用于匹配文本框中的值。
1 <input type="text" pattern="\d+" name="count" >
5、检测有效性
checkValidity() 方法可以检查表单中的某个字段是否有效。所有的表单字段都有这个方法。
话句话说:必填字段中如果没有值就是无效的,而字段中的值与pattern属性不匹配也是无效的。
1 2 3 4 5 if (document .forms[0 ].elements[0 ].checkValidity()){ } else { }
要检测整个表单是否有效,可以在表单自身调用checkValidity()方法。如果所有表单字段都有效,这个方法返回true;即使有一一个字段无效,这个方法也会返回false。
1 2 3 4 5 if (document .forms[0 ].checkValidity()){ } else { }
6、禁用验证
novalidate 属性:设置它,表单就不需要进行验证。
1 2 3 <form method="post" action=" " novalidate> </form>
formnovalidate 属性:某一个按钮不需要验证。
1 <input type="submit" name="阿清" value="aqing" formnovalidate>
选择框脚本 选择框是通过\和\元素创建的。为了方便与这个控件交互,除了所有表单字段共有的属性和方法外,HTMLSelectElement 类型还提供了下列属性和方法。
add (newoption, relOption): 向控件中插人新\元素,其位置在相关项( relOption)之前。
multiple:布尔值,表示是否允许多项选择;等价于HTML中的multiple特性。
options:控件中所有\元素的HTMLCollection。
remove ( index) :移除给定位置的选项。
selectedIndex:基于0的选中项的索引,如果没有选中项,则值为-1。对于支持多选的控件,只保存选中项中第一项的索引。
size:选择框中可见的行数;等价于HTML中的size特性。
选择框的type属性不是”select-one”,就是”select- multiple”,这取决于HTML代码中有没有multiple特性。选择框的value属性由当前选中项决定,相应规则如下。
如果没有选中的项,则选择框的value属性保存空字符串。
如果有一个选中项,而且该项的value特性已经在HTML中指定,则选择框的value属性等于选中项的value特性。即使value特性的值是空字符串,也同样遵循此条规则。
如果有一个选中项,但该项的value特性在HTML中未指定,则选择框的value属性等于该项的文本。
如果有多个选中项,则选择框的value属性将依据前两条规则取得第一个选中项的值。
举个栗子:
1 2 3 4 5 6 7 <select name="location" id="selLocation" > <option value ="Sunnyvale, CA" > Sunnyvale</option > <option value ="Los Angeles, CA" > Los Angeles</option > <option value ="Mountain View, CA" > Mountain View</option > <option value ="" > China</option > <option > Australia</option > </select>
如果用户选择了其中第一项,则选择框的值就是” Sunnyvale, CA”。 如果文本为”China “的选项被选中,则选择框的值就是-一个空字符串,因为其value特性是空的。如果选择了最后一项,那么由于\中没有指定value特性,则选择框的值就是” Australia”。
在DOM中,每个\元素都有一个HTMLOptionElement 对象表示。为便于访问数据,HTMLOptionElement对象添加了下列属性:(这些属性的目的都是为了方便选项的访问)
index:当前选项在options集合中的索引。
label:当前选项的标签;等价于HTML中的label特性。
selected:布尔值,表示当前选项是否被选中。将这个属性设置为true可以选中当前选项。
text:选项的文本。
value:选项的值(等价于HTML中的value特性)。
1 2 3 4 var selectbox = document .forms[0 ]. elements["location" ];var text = selectbox.options[0 ].text; var value = selectbox.options[0 ].value;
1、添加选项 有两种方法 1、使用DOM方法
1 2 3 4 var newOption = document .createElement("option" );newOption.appendChild(document .createTextNode("Option text" )); newOption.setAttribute("value" , "Option value" ); selectbox.appendChild(newOption);
2、添加新选项的方式是使用选择框的add()方法。DOM规定这个方法接受两个参数:要添加的新选项和将位于新选项之后的选项。如果想在列表的最后添加一个选项,应该将第二个参数设置为null。在IE中第二个参数设置为undefined。
1 2 var newOption = new Option("Option text" , "Option value" );selectbox.add(newOption, undefined );
推荐使用第二种
2、移除选项 1、使用DOM方法中的removeChild() 方法
1 selectbox.removeChild(selectbox.options[0 ]);
2、使用选项框中的remove() 方法 一个参数:移除选项的索引
3、就是将相应选项设置为null。
1 selectbox.options[0 ] = null ;
3、移动和重排选项 移动:使用DOM中的appendChild() 方法
1 2 3 var selectbox1 = document .getElementById("selLocations1" );var selectbox2 = document .getElementById("selLocations2" );selectbox2.appendChild(selectbox1.options[0 ]);
移动选项与移除选项有一个共同之处,即会重置每-一个选项的index属性。
重排:使用DOM方法 insertBefore() 方法。
1 2 var optionToMove = selectbox.options[1 ];selectbox.insertBefore(optionToMove, selectbox.options[optionToMove.index-1 ]);
愿你的坚持终有收获。