第十四章 表单脚本
一、表单的基础知识
在HTML中,表单是由<form>元素来表示的,在JavaScript中,表单对应的是HTMLFormElement 类型。HTMLFormElement 继承了 HTMLElement,因而与其他HTML元素具有相同的默认属性。不过,HTMLFormElement有自己独有的属性和方法。
在javaScript中可以提交表单、重置表单以及操作表单的字段。
下面是一个例子:
假设有一个文本框,我们只允许用户输入数值。此时,可以利用 focus 事件修改文本框的背景颜色,以便更清楚地表明这个字段获得了焦点。可以利用 blur 事件恢复文本框的背景颜色,利用change事件在用户输入了非数值字符时再次修改背景颜色。
实现代码:
1 <html> 2 <head> 3 </head> 4 <body> 5 <form method="post" id="myForm">表单<br> 6 <input type="text" size="20" maxlength="50" value="mytext"> 7 </form> 8 <script type="text/javascript" src="myscript.js"></script> 9 </body> 10 </html>
1 var EventUtil = { 2 addHandler: function(element,type,handler){ 3 if(element.addEventListener){ 4 element.addEventListener(type,handler,false); 5 }else if(element.attachEvent){ 6 element.attachEvent("on"+type,handler); 7 }else{ 8 element["on"+type]=handler; 9 } 10 }, 11 removeHandler: function(element,type,handler){ 12 if(element.removeEventListener){ 13 element.removeEventListene(type,handler,false); 14 }else if(element.detachEvent){ 15 element.detachEvent("on"+type,handler); 16 }else{ 17 element["on"+type] = null; 18 } 19 }, 20 getEvent : function(event){ 21 return event ? event : window.event; 22 }, 23 getTarget:function(event){ 24 return event.target||event.srcElement; 25 }, 26 preventDefault:function(event){ 27 if(event.preventDefault){ 28 event.preventDefault(); 29 }else{ 30 event.returnValue=false; 31 } 32 }, 33 stopPropagation:function(event){ 34 if(event.stopPropagation){ 35 event.stopPropagation(); 36 }else{ 37 event.cancelBubble=true; 38 } 39 } 40 }; 41 42 var textbox = document.forms[0].elements[0]; //取得text元素 43 44 EventUtil.addHandler(textbox,"focus",function(event){ //当前字段获得焦点时触发 45 event = EventUtil.getEvent(event); 46 var target = EventUtil.getTarget(event); 47 if(target.style.backgroundColor!="red"){ 48 target.style.backgroundColor = "yellow"; 49 } 50 textbox.select();//选中文本框中的所有文本 51 }); 52 EventUtil.addHandler(textbox,"blur",function(event){ //当前字段失去焦点时触发 53 event = EventUtil.getEvent(event); 54 var target = EventUtil.getTarget(event); 55 if(/[^\d]/.test(target.value)){ //为非数值时 56 target.style.backgroundColor = "red"; 57 }else{ 58 target.style.backgroundColor = ""; 59 } 60 }); 61 EventUtil.addHandler(textbox,"change",function(event){ <input>和<textarea>元素,在它们失去焦点且 value 值改变时触发;对于 <select>元素,在其选项改变时触发。 62 event = EventUtil.getEvent(event); 63 var target = EventUtil.getTarget(event); 64 if(/[^\d]/.test(target.value)){ 65 target.style.backgroundColor = "red"; 66 }else{ 67 target.style.backgroundColor = ""; 68 } 69 });