表单字段
避免多次提交表单
1 2 3 4 5 6 7 8 9 10
| EventUtil.addHandler(form, "submit", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); //取得提交按钮 var btn = target.elements["submit-btn"]; //禁用它 btn.disabled = true; });
|
HTML5 为表单字段新增了一个 autofocus 属性。在支持这个属性的浏览器中,只要设置这个属性,不用javascript 就能自动把焦点移动到相应字段。
1
| <input type="text" autofocus>
|
为了保证前面的代码在设置 autofocus 的浏览器中正常运行,必须先检查是否设置了改属性,如果设置了,就不用再调用 foucus() 了。
1 2 3 4 5 6
| EventUtil.addHandler(window, "load", function(event){ var element = document.forms[0].elements[0]; if (element.autofocus != true) { element.focus(); } });
|
选择文本
跨浏览器取得选择文本
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) { //IE 8-= return document.selection.createRange().text; } }
|
跨浏览器选择部分文本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function selectText(textbox, startIndex, stopIndex) { if (textbox.setSelectionRange) { textbox.setSelectionRange(startIndex, stopIndex); } else if (textbox.createTextRange) { //IE 8-= var range = textbox.createTextRange(); range.collapse(true); range.moveStart("character", startIndex); range.moveEnd("character", stopIndex - startIndex); range.select(); } textbox.focus(); } textbox.value = "Hello world!" //选择所有文本 selectText(textbox, 0, textbox.value.length); //"Hello world!" //选择前3个字符 selectText(text, 0, 3); //"Hel" //选择第 4 到第 6 个字符 selectText(textbox, 4, 7); //"o w"
|
选择部分文本的技术在实现高级文本输入框时很有用,例如提供自动完成建议的文本框就可以使用这种技术。
过滤输入
屏蔽字符
下列代码只允许用户输入数值
1 2 3 4 5 6 7 8 9
| 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) { //Safari 3- EventUtil.preventDefault(event); } });
|
操作剪贴板
1 2 3 4 5 6 7 8 9 10 11 12
| getClipboardText: function(event) { var clipboardData = (event.clipboardData || window.clipboardData); return clipboardData.getData("text"); }, setClipboardText: function(event){ if (event.clipboardData) { return event.clipboardData.setData("text/plain", value); } else if (window.clipboardData) { return window.clipboardData.setData("text", value); } },
|
在需要确保黏贴到文本框中的文本中包含某些字符,或者符合某种格式要求时,能够访问剪贴板是非常有用的。例如,如果一个文本框只接受数值,那么久必须检测黏贴过来的值。
1 2 3 4 5 6 7 8
| EventUtil.addHandler(textbox, "paste", function(event){ event = EventUtil.getEvent(event); var text = EventUtil.getClipboardText(event); if(!/^\d*$/.test(text)) { EventUtil.preventDefault(event); } });
|
自动切换焦点
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
| (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);
|
不过这些代码只适用于前面给出的标记,而且没有考虑隐藏字段。