Ajax 板


LINE

由於工作上的需要以及對lib的無知,小弟自己用JavaScript寫了一些簡單 的function, 想提出來討論 (不過才剛寫好,可能有些疏漏)。 簡單來說這個traval function適用在檢查表單的必填項目。 透過在表單下自訂Attribute的方式來達到必填項目的控管, 也可以將那些在submit_check前煩雜的 if else 做一定程度的簡化。 適用IE & FF。 使用的自訂屬性一共有三個。 mark(必填) , colname(可免填) , rule(可免填) (只是用底下a、d系列) @mark : 用來標記此element為必填項目 @colname:在此項目未填時,可用來作為提示訊息。 @rule : 支援正則表示式之字串規格驗證 適用目標: input tag系列 :(a) text password file hidden (b)checkbox radio (c)SELECT (d)Textarea a類別是屬於 value比對類。如果沒有輸入rule則trim後比對空白。 b類別屬於群組確認內。擷取目標的name屬性進行getElementByNames, 取得的群組中只要有一個屬於checked ,就算通過驗證。 c類別是驗證下拉式選單是否停在第一個選項 d類別同a類 另外沒有通過必填項目驗證者 會提示訊息 並將目標node做focus 使用範例 <input tpye="text" mark="true" rule=".+" colname="報表名稱" id="rna" name="rna"> 由於才剛寫好還蠻興奮的,所以提出來和同好分享, 如果有前輩對這類的小工具有甚麼要注意的地方, 或者是有值得改進的地方,可提供給晚輩參考的,還請不吝指教。 原碼暫且先貼在後,不過只是初稿,因為晚上有約所以才剛告一段落而已, 稍後校稿之後會再修正一次。^^ ──────────────────────────────── //瀏覽所有節點 function traval(){ var node_targe; var typeArray=new Array(3); typeArray[0]="INPUT"; typeArray[1]="SELECT"; typeArray[2]="TEXTAREA" for(var i=0;i<typeArray.length;i++){ node_targe=document.getElementsByTagName(typeArray[i]); for(var nodeId in node_targe) { if(document.all){ if(node_targe[nodeId].mark) checkNode(nodeId); }else{//FF對自訂屬性的處理法 : 改用getAttribute //將除了可操作元件以外的屬性排除 if((typeof node_targe[nodeId].nodeType)=="undefined") continue; var targeNode=node_targe[nodeId]; if(targeNode!=null&&targeNode.getAttribute("mark")){ checkNode(targeNode.getAttribute("id")); } } } } } //個別檢查節點 function checkNode(nodeId){ var node=document.getElementById(nodeId); var check=true; switch(node.nodeName){ case "INPUT": alert('hi'); //檢查"輸入"型態的欄位 (或者換句話說 , 用value判斷者 . 支援 regex ) if(node.type=="text" || node.type=="password" || node.type=="file" || node.type=="hidden"){ if(node.getAttribute("rule")){ if(!match(node.value,node.getAttribute("rule"))){ alertErrorMsg(nodeId); return false; }else return true; }else{ if(trim(node.value)==""){ alertErrorMsg(nodeId); return false; } } //群組式的 checkbox 或 radio ..檢查同 [name] 的群組是否有被勾 選 }else if (node.type=="checkbox"||node.type=="radio"){ var NodeGroup=document.getElementsByName(node.name); var check=false; for(var k in NodeGroup){ if(NodeGroup[k].checked){ check=true; } } if(!check) { alertErrorMsg(nodeId); return false; } }else{ alert('debug:在['+nodeId+']出現未知的型別 ['+node.type+']!'); return false; } break; case "SELECT": if(node.selectedIndex==0){ alertErrorMsg(nodeId); return false; } break; case "Textarea": if(node.getAttribute("rule")){ match(node.value,node.getAttribute("rule")); }else{ if(trim(node.value)==""){ alertErrorMsg(nodeId); return false; } } break; default: alert('debug:在['+nodeId+']出現未知的型別 ['+node.nodeName+']!'); break; } alert('finish'+node.nodeName); } function match(str,pattern){ var re = new RegExp(pattern, "gi"); if(!re.test(str)) return false; else return true; } function trim(str) { return str.replace(/^\s*|\s*$/g,""); } function alertErrorMsg(nodeId){ var node=document.getElementById(nodeId); if(node.getAttribute("colname")) alert(node.colname+"未正確填寫!"); else alert("尚有欄位未正確填寫!"); node.focus(); return false; } </script> -- String temp="relax"; | Life just like programing while(buringlife) String.forgot(temp); | to be right or wrong while(sleeping) brain.setMemoryOut(); | need not to say stack.push(life.running); | the complier will stack.push(scouting.buck()); | answer your life stack.push(bowling.practice()); | Bone everything --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68 ※ 編輯: TonyQ 來自: 220.134.27.68 (02/27 18:01)
1F:推 PsMonkey:還不錯阿... 怎麼沒人 m 也沒人推 02/28 06:11
2F:推 curtis816:推 02/28 08:18
3F:推 smno1:推 03/12 20:45







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP