//**************************************************************** // General purpose functions // // Company: Linkway Technology Inc. // Author : Jackie Yang // Emial : jackie_yang@email.linkway.com.tw // //**************************************************************** // Log of changes: // 2002/07/19 - First release // 2004/08/10 - ADD isCheckBox & getCheckBox & cbTemplate // 2004/08/13 - Modify isPosInteger & isInteger & isNumber // 2004/08/16 - Add doAllChoose method for checkbox choose // 2004/11/27 - Add isRadioBox & getRadioBox // 2004/12/01 --Add pop_sys_fnct //**************************************************************** // 禁止使用者產生右鍵功能選單 document.onmousedown = click; document.oncontextmenu = new Function("return false;"); function click(e) { if (event.button==1||event.button==2||event.button==3) { oncontextmenu='return false'; } } //字串的trim() function, trim 字串前後的空白 String.prototype.trim = function () { return this.replace(/^\s*/, "").replace(/\s*$/, ""); } // 禁止使用者按"F11","F5","ENTER" document.onkeydown=checkKeyInput; var hotkey_f11=122; var hotkey_f5=116; var hotkey_enter=13; function checkKeyInput(e) { //判斷在文字輸入區塊則可作用 if(event.srcElement.type!='textarea'){ if (event.keyCode==hotkey_f11 || event.keyCode==hotkey_enter) { event.keyCode = 8; return false; } } } // Set focus & select input text function doSelect(fld) { fld.focus(); fld.select(); } // Check is empty or null function isEmpty(str) { if(str == null || str == "") return true; return false; } // Check is a positive intger function isPosInteger(val) { if(val == null) return false; var str = val.toString(); for(var i=0; i < str.length;i++) { var ch = str.charAt(i); if(ch < '0' || ch > '9') return false; } return true; } // Check is an intger function isInteger(val) { if(val == null) return false; var str = val.toString(); for(var i=0; i < str.length;i++) { var ch = str.charAt(i); if(i == 0 && ch == '-') continue; if(ch < '0' || ch > '9') return false; } return true; } // Check is a number(include '-', '.') function isNumber(val) { if(val == null) return false; var oneDecimal = false; var str = val.toString(); for(var i=0; i < str.length;i++) { var ch = str.charAt(i); if(i == 0 && ch == '-') continue; if(ch == '.' && !oneDecimal) { oneDecimal = true; continue; } if(ch < '0' || ch > '9') return false; } return true; } // Check is legal date format function isDate(str) { // check format var re_date = /^(\d+)\/(\d+)\/(\d+)$/; if (!re_date.exec(str)) return false; // check month & date if (RegExp.$2 > 12 || RegExp.$3 > 31) return false; // check legal date var tmpDate = new Date(RegExp.$1, RegExp.$2-1, RegExp.$3); var tmpYear = tmpDate.getFullYear(); var tmpMnth = tmpDate.getMonth() + 1; var tmpDay = tmpDate.getDate(); if(isNaN(tmpYear) || isNaN(tmpMnth) || isNaN(tmpDay)) return false; if(tmpYear != RegExp.$1 || tmpMnth != RegExp.$2 || tmpDay != RegExp.$3) return false; return true; } // Check is CheckBox checked function isCheckBox(chkForm, onlyOne) { var chkList = getCheckBox(chkForm); var chkCount = chkList.length; if(chkCount < 1) { //資料未選取! alert("資料未選取!"); return false; } // Only one check if(onlyOne && chkCount > 1) { //只能選取一筆資料! alert("只能選取一筆資料!"); return false; } return true; } // Get the checked CheckBox indexs function getCheckBox(chkForm) { var chkList = new Array(); var chkCount = 0; // parse each form's fields var row = 0; for(var i=0; i < chkForm.length; i++) { // check if type is CheckBox if(chkForm.elements[i].type =='checkbox') { // check if checked if(chkForm.elements[i].checked) { chkList[chkCount] = row; chkCount++; } row++; } } return chkList; } // CheckBox choose template function cbTemplate(chkForm, onlyOne) { // Check have selected if(!isCheckBox(chkForm, onlyOne)) return; // get selected values var chkList = getCheckBox(chkForm); var chkCount = chkList.length; //是否確認處理此'+chkCount+'筆資料? if(!confirm('是否確認處理此'+chkCount+'筆資料?')) return; // process each row for(var i=0; i < chkCount; i++) { // Get the value var row = chkList[i]; // var data = obj.getItem(row, 0); } } // checkbox action:chkflag=0(全選),chkflag=0(全不選) function doAllChoose(chkForm,chkflag){ // parse each form's fields for(var i=0; i < chkForm.length; i++) { // check if type is CheckBox if(chkForm.elements[i].type == 'checkbox' && chkForm.elements[i].disabled == false) { if(chkflag==0) chkForm.elements[i].checked =true; else chkForm.elements[i].checked =false; } } } // Check is RadioBox checked function isRadioBox(chkForm) { var radList = getRadioBox(chkForm); var radCount = radList.length; if(radCount == 0) { // 資料未選取! alert('資料未選取!'); return false; } return true; } // Get the checked RadioBox indexs function getRadioBox(chkForm) { var radList = new Array(); var radCount = 0; // parse each form's fields var row = 0; for(var i=0; i < chkForm.length; i++) { // check if type is Radio if(chkForm.elements[i].type =='radio') { // check if checked if(chkForm.elements[i].checked) { radList[radCount] = row; radCount++; } row++; } } return radList; } // ************************ Add by stevenyu bengin ************************************* // function ChangeDate(DateStr, str){ msg = ''; msg = ChkDate(DateStr,str); if (msg!="") { alert(msg); DateStr.value=""; return false; } } function checkdatescope(startdate, enddate, msgheader){ var msg = ""; if(startdate != "" && enddate != ""){ if( startdate.indexOf("/") > 0 ){ startdate = R2CDateR(startdate); } if( enddate.indexOf("/") > 0 ){ enddate = R2CDateR(enddate); } if(startdate > enddate){ // {0}起日不可大於{1}迄日! msg = ''+msgheader+'起日不可大於'+msgheader+'迄日!'; } } return msg; } function checktimescope(startdate,starttime,enddate,endtime,msgheader){ var msg = ""; if(startdate != "" && starttime != "" && enddate != "" && endtime != ""){ var end = enddate + endtime; var start = startdate + starttime; if(end < start){ // {0}起日不可大於{1}迄日! msg = ''+msgheader+'起日不可大於'+msgheader+'迄日!'; } } return msg; } function checktimeformat(ntime,msgheader) { // 檢核時間長度 if (ntime.length!=8) { // 格式錯誤 alert(msgheader + " Format Error!"); return false; } var hours = ntime.substring(0,2); var minutes = ntime.substring(3,5); var seconds = ntime.substring(6,8); // 檢核是否為冒號區分 if (!(ntime.substring(2,3)==':') || !(ntime.substring(5,6)==':') ) { // 格式錯誤 alert(msgheader + " Format Error!"); return false; } // 檢核是否為數字 if (isNaN(hours) || isNaN(minutes) || isNaN(seconds)) { // 格式錯誤 alert(msgheader + " Format Error!"); return false; } if (hours>=24 || hours < 0) { // 格式錯誤 alert(msgheader + " Format Error!"); return false; } if (minutes>60 || minutes < 0) { // 格式錯誤 alert(msgheader + " Format Error!"); return false; } if (seconds>60 || seconds < 0) { // 格式錯誤 alert(msgheader + " Format Error!"); return false; } return true; } function ChkDate(DateStr, str) { //日期obj,提示字串 tmp = DateStr.value; msg = ''; if (DateStr == ''){ return msg; } //日期格式 if (10==DateStr.value.length && '/'==DateStr.value.substr(4,1) && '/'==DateStr.value.substr(7,1)){ DateStr.value = DateStr.value.substr(0,4) + DateStr.value.substr(5,2) + DateStr.value.substr(8,2); } if ((8!=DateStr.value.length && 0!=DateStr.value.length) || isNaN(DateStr.value) ){ //格式應為yyyy/mm/dd,且y,m,d須為數字,不可包含 . 或 - msg += (str + '格式應為yyyy/mm/dd,且y,m,d須為數字,不可包含 . 或 -' + '\n'); } if(!msg){ for(var i=0; i < DateStr.value.length;i++) { var ch = DateStr.value.charAt(i); //格式應為yyyy/mm/dd,且y,m,d須為數字,不可包含 . 或 - if(ch == '.' || ch == '-') msg += (str + '格式應為yyyy/mm/dd,且y,m,d須為數字,不可包含 . 或 -' + '\n'); } } if (msg){ DateStr.value = tmp; return msg; }else{ if (''!=tmp){ DateStr.value = DateStr.value.substr(0,4)+'/'+DateStr.value.substr(4,2)+'/'+DateStr.value.substr(6,2); } } //日期合理性 if (''!=DateStr.value){ monthday = new Array(29,31,28,31,30,31,30,31,31,30,31,30,31); cy = parseInt(DateStr.value.substr(0,4)); //這邊不用cm = parseInt(DateStr.value.substr(5,2))的原因 //當cm = 8,9的時候,只會抓到0... //alert(DateStr.value); //alert(DateStr.value.substr(5,1)); if ('1'==DateStr.value.substr(5,1)){ cm = DateStr.value.substr(5,2); //alert(cm); }else{ cm = DateStr.value.substr(6,1); //alert(cm); } //alert(DateStr.value.substring(8,10)); cd = parseFloat(DateStr.value.substring(8,10)); //alert(cd) if (12cm){ // 沒有 cm 月 msg += (str + '沒有 '+cm+' 月'+'\n'); }else{ if (2==cm && ((0==cy%4 && 0!=cy%100) || 0==cy%400)){ //閏月 if (cd>monthday[0]){ // cy 年 cm 月沒有 cd 號 msg += (str + ' ' +cy+' 年 '+cm+' 月沒有 '+cd+' 號'+'\n'); } if (cd < 1){ msg += (str + ' ' +cy+' 年 '+cm+' 月沒有 '+cd+' 號'+'\n'); } }else{ if (cd>monthday[cm]){ msg += (str + ' ' +cy+' 年 '+cm+' 月沒有 '+cd+' 號'+'\n'); } if (cd < 1){ msg += (str + ' ' +cy+' 年 '+cm+' 月沒有 '+cd+' 號'+'\n'); } } } } return msg; } // trim char (almost is '') from right side - Rolan function rightTrim(item, char){ if (!char) char = " "; if (item){ while (item.substring(item.length-1, item.length) == char) item = item.substring(0, item.length-1); } return item; } // trim char (almost is '') from left side - Jerry function leftTrim(item, char){ if (!char) char = " "; if (item){ while (item.substring(0,1) == char) item = item.substring(1); } return item; } //Trim char(almost id '') from both side(right and left) - Jerry function trim(item, char){ if (!char) char = " "; item = leftTrim(item, char); item = rightTrim(item, char); return item; } //**************************************************************** // Input欄位輸入資料檢核 // // 使用說明: // 1. 所有欲搭配此function進行資料檢核的欄位,其欄位名稱需以 //
標籤包住,並且於id屬性中,指定與input的name // 相同的屬性值,以便於資料檢核有誤時,依據input的name屬性 // 至
標籤擷取出欄位名稱。 // ex: 必要輸入欄位* // // 2. 本function將擷取網頁中所有"TEXT"及"PASSWORD"的輸入欄位, // ,檢核下列事項: // (1)必要欄位輸入檢核:如欄位名稱以'*'開頭或結尾,則表該 // 欄位為必要輸入欄位,本function將自動檢核該欄位是否 // 有輸入資料。 // (2)欄位長度限制檢核:將以input element中設定的maxlength // 屬性值,作為檢核的依據,當輸入資料超過欄位輸入長度限 // 制時,本function將自動alert錯誤欄位的對應名稱。 //**************************************************************** function chkAllInput(doc) { var reg = /^\*|\*$/; // Regular Expression,用於檢核是否為必要輸入欄位 var inputElements = doc.getElementsByTagName("input"); //var spanElements = doc.getElementsByTagName("span"); for (var i=0; i < inputElements.length; i++) { if (inputElements[i].type != 'text' && inputElements[i].type != 'password') { continue; } if(doc.getElementById(inputElements[i].name)==null){ continue; } if(doc.getElementById(inputElements[i].name).childNodes[0]==null){ continue; } // 取得輸入欄位的title(名稱) var inputTitle = doc.getElementById(inputElements[i].name).childNodes[0].nodeValue; // 如有正確取得欄位的名稱,則進行下列檢核 if (inputTitle != null) { // 確認該欄位是否為必要輸入欄位 if (reg.test(inputTitle)) { if (isEmpty(inputElements[i].value)) { //欄位為必要輸入欄位! showMsgDialog(inputTitle.replace("*", "") + " field is entered necessarily!",doSelect,[inputElements[i]]); return false; } } if (document.getElementById(inputElements[i].name).accessKey == 'Y') { if (isEmpty(inputElements[i].value)) { //欄位為必要輸入欄位! showMsgDialog(inputTitle + " field is entered necessarily!",doSelect,[inputElements[i]]); return false; } } // 檢核欄位輸入長度 if (inputElements[i].value != null && inputElements[i].value != "") { if (chkdoublecode(inputElements[i].value, inputElements[i].getAttribute("maxlength"))) { //欄位輸入資料長度錯誤! showMsgDialog(inputTitle.replace("*", "") + "欄位輸入資料長度錯誤!",doSelect,inputElements[i]); return false; } } } // 如未正確取得欄位的名稱,則僅檢核欄位輸入長度,並直接以input name顯示錯誤訊息 if (inputTitle == null) { // 檢核欄位輸入長度 if (inputElements[i].value != null && inputElements[i].value != "") { if (chkdoublecode(inputElements[i].value, inputElements[i].getAttribute("maxlength"))) { //欄位輸入資料長度錯誤! showMsgDialog(inputElements[i].name + "欄位輸入資料長度錯誤!",doSelect,[inputElements[i]]); return false; } } if (document.getElementById(inputElements[i].name).accessKey == 'Y') { if (isEmpty(inputElements[i].value)) { //欄位為必要輸入欄位! showMsgDialog(inputElements[i].name + " field is entered necessarily!",doSelect,[inputElements[i]]); return false; } } } } return true; } //檢核字串長度(可檢核中英混合字串) //str = 欲檢核字串 //len = 字串長度 //檢核失敗 return true function chkdoublecode(str,len){ var re = /[\u0000-\u00FF]+/; var strLen =0; for(i = 0; i < str.length; i ++){ if (!re.test(str.substr(i,1))){ strLen+=3; }else{ strLen+=1; } } if(len < strLen) return true; else return false; } //將頁面上的 button全部鎖住或解鎖 //val= (true:鎖住,false:解鎖) function buttonLock(val) {//鎖住按鍵 for(var i=0; i < document.forms[0].length; i++) { if(document.forms[0].elements[i].type == 'button' || document.forms[0].elements[i].type == 'reset' || document.forms[0].elements[i].type == 'submit'){ document.forms[0].elements[i].disabled = val; } } } //傳入dateValue民國年(YY/MM/DD),並將畫面上dateObj的value改成西元年(YYYY/MM/DD) //dateValue (String) 民國年日期字串 //dateObj (Object) 欲存放西元日期之物件 //return 西元年日期字串 // add by Allen 2008/10/03 function R2CDate(dateValue,dateObj){ if(dateValue=='' || dateObj==null){ return false; } var ss = dateValue.split('/'); ss[0] = Number(ss[0]) + 1911; if(ss[1].length == 1){ ss[1] = '0' + ss[1]; } if(ss[2].length == 1){ ss[2] = '0' + ss[2]; } dateObj.value = ss[0]+ ss[1] +ss[2]; return dateObj.value; } //******************************************************** //確認密碼是否符合以下規則 // 1.不與usoldpwd,custid,userid,usrIdTip相同 // 2.長度至少八碼,最多十六碼 // 3.密碼不可含空白及特殊字元 // 4.密碼不可連續一樣 (如 1111) // 5.密碼不可連號(如 12345) // 6.密碼必須含有至少1個英文字 //******************************************************** // pwd : 密碼欄位 // reConfirmPwd : 再次輸入確認密碼欄位 (若無再次輸入檢核,和 pwd 同即可) // oldpwd : 舊密碼 (若無舊密碼,和 pwd 同即可) // userid : 使用者代號 function checkPassword(pwd,reConfirmPwd,oldpwd,userid){ //檢核密碼是否為空 if(isEmpty(pwd)){ alert("Password should not be nothing"); return false; } //檢核輸入是否與確認密碼欄位相同 if(pwd != reConfirmPwd){ alert("New password and confirm new password should not be the same"); return false; } //長度檢核 if(pwd.length<8 || pwd.length>12){ alert("Password must include a mix of letters or numbers and be between 8 and 12 characters long."); return false; } //新舊密碼是否相同檢核 if(oldpwd!="" && pwd==oldpwd){ alert("New password and old password should not be the same"); return false; } //檢核密碼是否等於使用者 ID if(pwd==userid){ alert("Password and login account should not be the same"); return false; } //密碼不可以存在空白! if(pwd.indexOf(' ') >=0 || pwd.indexOf(' ')>=0) { alert("Password should not include blanks characters"); return false; } //使用者代號不可以存在空白! if(userid.indexOf(' ')>=0 || userid.indexOf(' ')>=0) { alert("登入帳號不可以包含空白!"); return false; } //非法字元檢核 if(!isAlpha(pwd)) { alert("Password should not include special characters"); return false; } //檢核是否連續四個字元都一樣 var chi=''; var pwdleng=pwd.length-3; for(var i=0;i < pwdleng;i++){ var tag=1; chi = pwd.charAt(i); for(var j=i+1;j < i+4;j++){ if(chi==pwd.charAt(j)){ tag++; } } if(tag>=4){ alert("Password should not include the same consecutive 4 letters or numbers"); return false; } } //密碼不得為遞增連號! for(var i=0;i < pwdleng;i++){ var tag=1; for(var j=i;j < i+4;j++){ var firstASCII = pwd.charCodeAt(j); var nextASCII = pwd.charCodeAt(j+1)-1; if(firstASCII==nextASCII){ tag++; } } if(tag>=4){ alert("Password should not include ascending consecutive numbers."); return false; } } //密碼不得為遞減連號! for(var i=0;i < pwdleng;i++){ var tag=1; for(var j=i;j < i+4;j++){ var firstASCII = pwd.charCodeAt(j); var nextASCII = pwd.charCodeAt(j+1)+1; if(firstASCII==nextASCII){ tag++; } } if(tag>=4){ alert("Password should not include descending consecutive numbers."); return false; } } return true; } //檢核非法字元 function isAlpha(elmstr) { if (elmstr != '') { for (var i=0; i < elmstr.length; i++) { if ((elmstr.charAt(i) < '0' || elmstr.charAt(i) > '9') && (elmstr.charAt(i) < 'A' || elmstr.charAt(i) > 'Z') && (elmstr.charAt(i) < 'a' || elmstr.charAt(i) > 'z')) { return false; } } } return true; } //檢查 => 空白 . 英文字母 function isOnlyAlphaOrSpace(elmstr) { if (elmstr != '') { for (var i=0; i < elmstr.length; i++) { if(elmstr.charAt(i)=='' || elmstr.charAt(i) == ' '){ continue; } if(elmstr.charAt(i)=='.'){ continue; } if ((elmstr.charAt(i) < 'A' || elmstr.charAt(i) > 'Z') && (elmstr.charAt(i) < 'a' || elmstr.charAt(i) > 'z')) { return false; } } } return true; } //檢核非法字元(包含空白) function isAlphaOrSpace(elmstr) { if (elmstr != '') { for (var i=0; i < elmstr.length; i++){ if(elmstr.charAt(i)=='' || elmstr.charAt(i) == ' '){ continue; } if(isAlpha(elmstr)){ continue; } return false; } } return true; } //檢核所輸入eMail值的正確性 function chkemail(emailtoCheck){ //參考 http://design2u.me/blog/896/javascri-t-regular-expression-email-form-validation //eMail規則如下: //(1) 必須以一個以上的文字&數字開頭 //(2) @ 之前可以出現 1 個以上的文字、數字與「-」的組合,例如 -abc- //(3) @ 之前可以出現 1 個以上的文字、數字與「.」的組合,例如 .abc. //(4) @ 之前以上兩項以 or 的關係出現,並且出現 0 次以上 //(5) 中間一定要出現一個 @ //(6) @ 之後出現一個以上的大小寫英文及數字的組合 //(7) @ 之後只能出現「.」或是「-」,但這兩個字元不能連續時出現 //(8) @ 之後出現 0 個以上的「.」或是「-」配上大小寫英文及數字的組合 //(9) @ 之後出現 1 個以上的「.」配上大小寫英文及數字的組合,結尾需為大小寫英文 var emailRule = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]+$/; // ^\w+:@ 之前必須以一個以上的文字&數字開頭,例如 abc // ((-\w+):@ 之前可以出現 1 個以上的文字、數字或「-」的組合,例如 -abc- // (\.\w+)):@ 之前可以出現 1 個以上的文字、數字或「.」的組合,例如 .abc. // ((-\w+)|(\.\w+))*:以上兩個規則以 or 的關係出現,並且出現 0 次以上 (所以不能 –. 同時出現) // @:中間一定要出現一個 @ // [A-Za-z0-9]+:@ 之後出現 1 個以上的大小寫英文及數字的組合 // (\.|-):@ 之後只能出現「.」或是「-」,但這兩個字元不能連續時出現 // ((\.|-)[A-Za-z0-9]+)*:@ 之後出現 0 個以上的「.」或是「-」配上大小寫英文及數字的組合 // \.[A-Za-z]+$/:@ 之後出現 1 個以上的「.」配上大小寫英文及數字的組合,結尾需為大小寫英文 if ( emailtoCheck.match(emailRule) ) return true; else return false; } // 依 Radio obj 取得Radio 選取的值 function getRadioValue(radioObj){ //當只有一個選項的時候 可以得到value 也就不會等於undefined了 if (radioObj.value != undefined){ if (radioObj.checked){ return radioObj.value; } }else{ //當有兩個以上的選項時 要用迴圈取得checked的選項 for (var i=0; i < radioObj.length; i++){ if (radioObj[i].checked){ return radioObj[i].value; break; } } } } //=================================================================== //功能:呼叫 Ajex ,傳入id 之後轉換成名稱 //type tag 的名稱 //params tag 的參數 範例'param1='+p1+'param2='+p2 ,其中param1,param2 為固定,對應tag的參數,請依此類推 //divTagName 頁面上 div 標籤的 id //=================================================================== function convertId2name(type,params,divTagName){ //檢核查詢條件是否有非法字元(全形字元會使查詢條件超過欄位長度) //var re = /[\w\s'"$:&,=]+/; var re = /[\u0000-\u00FF]+/; for(i = 0; i < params.length; i ++){ if (!re.test(params.substr(i,1))){ return false; } } var url = '/evote/common/convertId2name.jsp'; var myAjax = new Ajax.Updater( divTagName, url, { method:'get', parameters:params + '&type='+ type, asynchronous:false, onFailure:convertId2nameError }); } function convertId2nameError(){alert('網路連線異常!');}//convertId2name debug //=============================================================== //日期加總 (格式民國年) by Allen //說明 : 傳回 startDay + day //startDay : 起使日 //day : 加總日期 //=============================================================== function countDay(startDay, day, style){ index1 = startDay.indexOf("/"); index2 = startDay.lastIndexOf("/"); var startYear = eval(startDay.substr(0, index1))+1911; var startMonth = parseInt(startDay.substr(index1+1, index2), 10)-1; var startDay = startDay.substr(index2+1, startDay.length); var date = new Date(startYear, startMonth, startDay); day = parseInt(day)*86400*1000; var shiftDate = new Date(); shiftDate.setTime(date.getTime() +day); var dateYear = shiftDate.getYear()-1911; var dateMonth = (shiftDate.getMonth()+1); if((dateMonth.toString()).length == 1){ dateMonth = "0" + dateMonth; } var dateday = shiftDate.getDate(); if((dateday.toString()).length == 1){ dateday = "0" + dateday; } if(style != null){ return (dateYear+'') + (dateMonth+'') + (dateday+''); } return dateYear + "/" + dateMonth + "/" + dateday; } //身分證字號檢核 function idchk(data){ var c, n, i,check ; var letter="ABCDEFGHJKLMNPQRSTUVXYWZIO"; var head; var site = data.substring(0,1); site = letter.indexOf(site.toUpperCase()); if(data.length == 10 && site >= 0){ if(data.charAt(1) != '1' && data.charAt(1) != '2' && data.charAt(1) != '8' && data.charAt(1) != '9'){ return false }else{ check = parseInt(site/10)+ site%10*9+ 1; for(i=1; i<9; i++) check=check+parseInt(data.substring(i,i+1))*(9-i); check = (10 - (check % 10))% 10; if(check!= parseInt(data.substring(9,10))){ return false } return true } }else{ return false } } //英數字檢核 function RegCheck(data) { //var reg = /^[a-zA-Z0-9]{10}$/; var reg = /^[a-zA-Z]\d{9}$/; return reg.test(data); } function LetterNumCheck(data){ if(data && data != ''){ var reg = /^[\d|a-zA-Z]+$/; return reg.test(data); } else{ return true; } } //中英文輸入全形檢核,所有全形字 //變更或離開時檢核 onchange onblur function check_fullChar(validStr) { for(var i=0; i < validStr.length ; i++) { var str = encodeURI(validStr.charAt(i)); if (str.length <= 1){ return false; } } return true; } //中英文輸入全形檢核,只有全形文字可通過輸入(只檢查輸入字串部份,原字串不檢核) //輸入即時檢核 onkeypress onpaste ondrop function regFullCharInput(obj,validStr) { var docSel = document.selection.createRange(); if (docSel.parentElement().tagName != "INPUT" && docSel.parentElement().tagName != "TEXTAREA"){ return false; } if(docSel.parentElement().tagName == "INPUT"){ oSel = docSel.duplicate(); oSel.text = ""; var srcRange = obj.createTextRange(); oSel.setEndPoint("StartToStart", srcRange); var str = oSel.text + validStr + srcRange.text.substr(oSel.text.length); }else if(docSel.parentElement().tagName == "TEXTAREA"){ oSel = docSel.duplicate(); oSel.value = ""; oSel.text = ""; oSel.moveToElementText(obj); oSel.setEndPoint("StartToStart", docSel); var str = oSel.text + validStr + docSel.text.substr(oSel.text.length); } if(chkIsFullStrDoublecode(validStr)){ return true; }else{ return false; } } //中英文輸入全形檢核,只有全形文字可通過輸入,未通過字元過濾掉(全部字串檢核,包含輸入字串) //輸入即時檢核 onkeyup ,因新注音等輸入法onkeypress事件無法作用 function regFullCharInputReplace(obj){ var validStr=obj.value; var resultStr=""; for(var i=0; i < validStr.length ; i++) { if (chkFullCharDoublecode(validStr.charAt(i))){ resultStr=resultStr+validStr.charAt(i); } } if(obj.value==resultStr){ return true; }else{ obj.value=resultStr; return false; } } // 只允許英數字,不允許全行文字含中文字與特殊符號 function regNoFullCharInputReplace(obj){ var validStr=obj.value; var resultStr=""; var reg = /[^0-9a-zA-Z]/g; for(var i=0; i < validStr.length ; i++) { if (chkFullCharDoublecode(validStr.charAt(i))){ resultStr = resultStr + validStr.charAt(i); } } if(resultStr.length > 0){ obj.value = obj.value.replace(resultStr,""); return false; } if (reg.test(obj.value)){ obj.value = obj.value.replace(reg,''); return false; } return true; } //檢核是否為全形字 //strChar = 欲檢核字元 //檢核失敗 return true function chkFullCharDoublecode(strChar){ var reg = /[\u0000-\u00FF]+/; if(strChar.length==0) return true; if (!reg.test(strChar)){ return true; }else{ return false; } } //檢核是否為全形字串 //validStr = 欲檢核字串 //檢核失敗 return true function chkIsFullStrDoublecode(validStr){ var reg = /[\u0000-\u00FF]+/; for(var i=0; i < validStr.length ; i++) { if (reg.test(validStr.charAt(i))){ return false; } } return true; } /* //中英文輸入全形檢核,只有全形A~Z a~z 0~9及中文字可通過輸入 //輸入即時檢核 onkeypress onpaste ondrop function regFullCharInput(obj,inputStr) { reg=/[^A-z\u4e00-\u9fa5\u8140-\ufefe0-9 ]/; var docSel = document.selection.createRange(); if (docSel.parentElement().tagName != "INPUT") return false; oSel = docSel.duplicate(); oSel.text = ""; var srcRange = obj.createTextRange(); oSel.setEndPoint("StartToStart", srcRange); var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length); //alert('reg='+reg+'--str='+str+'--'+reg.test(str)); return !(reg.test(str)); } //中英文輸入全形檢核,只有全形A~Z a~z 0~9及中文字可通過輸入,未通過字元過濾掉 //輸入即時檢核 onkeyup ,因新注音等輸入法onkeypress事件無法作用 function regFullCharInputReplace(obj){ var reg=/[^A-z\u4e00-\u9fa5\u8140-\ufefe,、。;:?!〈〉《》【】﹝﹞『』「」─‧〝〞‘’“”○●◎§0-9 ]/g; var inputStr=obj.value; if(inputStr.match(reg)){ obj.value=inputStr.replace(reg,''); } } */ //=============================================================== //檢核欄位格式 //說明:依據輸入的條件做功能項檢核 //title : 欄位名稱 //object : 欄位物件 //chkType: 需傳入 Array EX: new new Array('I','D') //'T':去空白 //'D':中文欄位長度檢核(UTF-8) //'A':只可輸入英數字(UTF-8) //'AS':只可輸入英數字(UTF-8),包含空白 //'I':只可輸入整數(UTF-8) //'N':只可輸入數字(UTF-8) //'E':E-mail格式檢核(UTF-8) //'P':欄位不可為空 //'ID':統一編號檢核 //'IDNO':身份證字號 //'FC':字型全型檢核 // add by Allen 2008/11/06 //=============================================================== function chkInputFormat(title, object, chkType, ds){ //取得欄位值 var value = object.value; for (var i=0; i < chkType.length; i++){ if(chkType[i] == 'T'){ var str = object.value; str = trim(str,' '); object.value = str; continue; } //不可為空檢核 if(chkType[i] == 'P'){ if(isEmpty(value)){ //alert('' + title + '欄位不可為空!'); alert('' + title + '欄位不可為空!'); if(ds == null)doSelect(object); return false; } continue; } //若欄位為空直接略過不做檢核 if(isEmpty(value)){ continue; } //雙字元長度檢核 if(chkType[i] == 'D'){ //取得最大長度 var maxlength = object.getAttribute("maxlength"); //長度檢核 if(chkdoublecode(value,maxlength)){ //alert('' + title + '欄位長度超過最大限制!\n   該欄位最大限制長度為:' + maxlength + '\n  (英數字長度為1,中文長度為 4)'); alert('' + title + '欄位長度超過最大限制!\n   該欄位最大限制長度為:' + maxlength + '\n  (英數字長度為1,中文長度為 3)'); if(ds == null)doSelect(object); return false; } continue; } //雙字元長度檢核 if(chkType[i] == 'D2'){ //取得最大長度 var maxlength = object.getAttribute("maxlength"); //長度檢核 if(chkdoublecode(value,maxlength)){ //alert('' + title + '欄位長度超過最大限制!\n   該欄位最大限制長度為200。'); alert('' + title + '欄位長度超過最大限制!該欄位最大限制長度為200個全形字!'); if(ds == null)doSelect(object); return false; } continue; } //英數字檢核 if(chkType[i] == 'A'){ if(!isAlpha(value)){ //alert( title + '欄位只可輸入英數字!'); alert( title +'欄位只可輸入英數字!'); if(ds == null)doSelect(object); return false; } continue; } //英數字檢核(包含空白) if(chkType[i] == 'AS'){ if(!isAlphaOrSpace(value)){ //alert( title + '欄位只可輸入英數字!'); alert( title + '欄位只可輸入英數字!'); if(ds == null)doSelect(object); return false; } continue; } //整數檢核 if(chkType[i] == 'I'){ if(!isInteger(value)){ //alert(title + '欄位只可輸入整數!'); alert(title + '欄位只可輸入整數!'); if(ds == null)doSelect(object); return false; } continue; } //數字檢核 if(chkType[i] == 'N'){ if(!isNumber(value)){ //alert(title + '欄位只可輸入數字!'); alert(title + '欄位只可輸入數字!'); if(ds == null) doSelect(object); return false; } continue; } //E-MAIL 格式檢核 if(chkType[i] == 'E'){ if(!chkemail(value)){ //alert(title + '格式錯誤!'); alert(title + ' Format Error!'); if(ds == null) doSelect(object); return false; } continue; } //統一編號檢核 if(chkType[i] == 'ID'){ if(!chkTaxIdNo(value)){ //alert(title + '格式錯誤!'); alert(title + ' Format Error!'); if(ds == null) doSelect(object); return false; } } //身份證字號檢核 if(chkType[i] == 'IDNO'){ if(!idchk(value)){ //alert(title + '格式錯誤!'); alert(title + ' Format Error!'); if(ds == null) doSelect(object); return false; } } //字元全形檢核 if(chkType[i] == 'FC'){ if(!regFullCharInputReplace(object)){ //alert(title + '必須輸入全形文字!'); alert(title + ', please use fullwidth font when entering!'); if(ds == null) doSelect(object); return false; } } //整數檢核 if(chkType[i] == 'I2'){ if(!isInteger(value)){ //alert(title + '欄位只可輸入半形數字!'); alert(title + '欄位只可輸入半形數字!'); if(ds == null)doSelect(object); return false; } continue; } } return true; } //=============================================================== //列印 //說明:列印步驟 // add by AJ 2008/11/06 //=============================================================== //跳列印頁 function goPrint(url){ var dialogFeatures = "width=675px,height=500px,resizable=yes,status=no"; var rc = window.open(url,"",dialogFeatures); } function goPrintBigSize(url){ var dialogFeatures = "width=725px,height=500px,resizable=yes,status=no"; var rc = window.open(url,"",dialogFeatures); } //列印 function doPrint(btnObj, printWay){ btnObj.style.display='none'; window.print(); if(printWay==1){ btnObj.style.display=''; }else{ window.close(); } } //=============================================================== //說明:檢核統一編號是否正確 //規則: //(一) 長度:共八位,,全部為數字型態。 //(二) 計算公式 //1、各數字分別乘以 1,2,1,2,1,2,4,1。 //2、公式如下: // D1 D2 D3 D4 D5 D6 D7 D8 //* 1 2 1 2 1 2 4 1 (第一列 * 第二列) //A1 B1 A2 B2 A3 B3 A4 B4 (Bx:相乘後的十位數) //+ C1 C2 C3 C4 (Cx:相乘後的個位數) //X1 X2 X3 X4 X5 X6 X7 X8 (Xx:相加後的十位數) //Y7 (Yx:相加後的個位數) //Z1= X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 或 //Z1= X1 + X2 + X3 + X4 + X5 + X6 + Y7 + X8 //3、當第 7 位數為 7 者,可取相加之倒數第二位取 0 及 1 來計算如 Z1 及 Z2 計算其和。 //4、假如 Z1 或 Z2 能被 10 整除,則表示營利事業統一編號正確。 //(三) 範例 ( 以 0 0 2 3 8 7 7 8 為例 ) // 0 0 2 3 8 7 7 8 //* 1 2 1 2 1 2 4 1 (第一列 * 第二列) //0 0 2 6 8 1 2 8 (Bx:相乘後的十位數) //+ 4 8 (Cx:相乘後的個位數) //0 0 2 6 8 5 1 8 (Xx:相加後的十位數) //0 (Yx:相加後的個位數) //Z1= 0+ 0+ 2+ 6+ 8+ 5+ 1+ 8 = 30 或 //Z2= 0+ 0+ 2+ 6+ 8+ 5+ 0+ 8 = 29 //因 30 能被 10 整除,故營利事利統一編號正確。 //=============================================================== function chkTaxIdNo(idvalue) { var tmp = new String("12121241"); var sum = 0; re = /^\d{8}$/; if (!re.test(idvalue)){ return false; } for (i=0; i< 8; i++){ s1 = parseInt(idvalue.substr(i,1)); s2 = parseInt(tmp.substr(i,1)); sum += chkIdCal(s1*s2); } if (!chkIdValid(sum)){ if (idvalue.substr(6,1)=="7") return(chkIdValid(sum+1)); } return(chkIdValid(sum)); } function chkIdValid(n) { return (n%5 == 0)?true:false; } function chkIdCal(n) { var sum=0; while (n!=0) { sum += (n % 10); n = (n - n%10) / 10; // 取整數 } return sum; } function checkCapsLock(msgObj,e){ valueCapsLock = e.keyCode ? e.keyCode:e.which; // Caps Lock 是否打開 valueShift = e.shiftKey ? e.shiftKey:((valueCapsLock == 16 ) ? true : false ); // shift鍵是否按住 if ( ( (valueCapsLock >= 65 && valueCapsLock <= 90 ) && !valueShift) // Caps Lock 打開,並且 shift鍵沒有按住 || ( (valueCapsLock >= 97 && valueCapsLock <= 122 ) && valueShift) ){ // Caps Lock 打開,並且按住 shift鍵 msgObj.style.visibility = 'visible'; //大寫鎖定已開啟 msgObj.innerHTML = "大寫鎖定已開啟"; }else{ msgObj.style.visibility = 'hidden'; } /* javascript中keyCode代碼對應表 event.keyCode=32 空格 event.keyCode=13 回車 event.keyCode=27 Esc event.keyCode=16 Shift event.keyCode=17 Ctrl event.keyCode=18 Alt */ } // file upload progress bar function updateBra(){ document.getElementById("divProgress").style.visibility="visible"; var url = '/evote/common/progressBar.jsp'; var myAjax; myAjax = new Ajax.Updater('divProgress', url, { method:'post', parameters:'' } ); } //格式化金額 千分位加',' function formatAmt(n) { n = n + ""; re=/(\d{1,3})(?=(\d{3})+(?:$|\D))/g; var n1=n.replace(/,/g,'').replace(re,"$1,") return n1; } //傳入dateValue民國年(YY/MM/DD),傳出西元年(YYYY/MM/DD) //dateValue (String) 民國年日期字串 //return 西元年日期字串 // add by Tony Chiu 2010/02/21 function R2CDateR(dateValue){ if(dateValue==''){ return false; } var ss = dateValue.split('/'); ss[0] = Number(ss[0]) + 1911; if(ss[1].length == 1){ ss[1] = '0' + ss[1]; } if(ss[2].length == 1){ ss[2] = '0' + ss[2]; } return ss[0]+ ss[1] +ss[2]; } //傳入西元年(YYYYMMDD),傳出dateValue民國年(YY/MM/DD) //dateValue (String) 民國年日期字串 //return 西元年日期字串 // add by Jerry lin 2011/07/21 function C2RDate(dateValue){ if(dateValue==''){ return ''; } var s1 = dateValue.substr(0,4); var s2 = dateValue.substr(4,2); var s3 = dateValue.substr(6,2); s1 = Number(s1) - 1911; if(s2.length == 1){ s2 = '0' + s2; } if(s3.length == 1){ s3 = '0' + s3; } return s1+'/'+s2+'/'+s3; } //將輸入字串非數字的字元過濾掉 function regNumberReplace(obj){ var reg = /[^0-9]/g; var validStr=""; validStr=obj.value; if (reg.test(validStr)){ obj.value=validStr.replace(reg,''); return false; } return true; } //將輸入字串非數字的字元過濾掉 function regNumberReplace2(obj){ var reg = /[^0-9.]/g; var validStr=""; validStr=obj.value; if (reg.test(validStr)){ obj.value=validStr.replace(reg,''); return false; } //超過小數兩位會濾掉 var reg2 = /^\d+(\.\d{2})?$/; if(!reg2.test(validStr)){ obj.value = validStr.replace(/\.\d{2,}$/, validStr.substr(validStr.indexOf('.'),3)); return false; } return true; } //date格式增加 function DateAdd(interval,number,date){ switch(interval.toLowerCase()){ case "y": return new Date(date.setFullYear(date.getFullYear()+number)); case "m": return new Date(date.setMonth(date.getMonth()+number)); case "d": return new Date(date.setDate(date.getDate()+number)); case "w": return new Date(date.setDate(date.getDate()+7*number)); case "h": return new Date(date.setHours(date.getHours()+number)); case "n": return new Date(date.setMinutes(date.getMinutes()+number)); case "s": return new Date(date.setSeconds(date.getSeconds()+number)); case "l": return new Date(date.setMilliseconds(date.getMilliseconds()+number)); } } //date格式減少 function DateDiff(interval,date1,date2){ var long = date2.getTime() - date1.getTime(); //相差毫秒 switch(interval.toLowerCase()){ case "y": return parseInt(date2.getFullYear() - date1.getFullYear()); case "m": return parseInt((date2.getFullYear() - date1.getFullYear())*12 + (date2.getMonth()-date1.getMonth())); case "d": return parseInt(long/1000/60/60/24); case "w": return parseInt(long/1000/60/60/24/7); case "h": return parseInt(long/1000/60/60); case "n": return parseInt(long/1000/60); case "s": return parseInt(long/1000); case "l": return parseInt(long); } } //將傳入字串(text)於該字串左邊之指定長度(totalChars)扣除原字串長度補欲補的字元(padWithChar) function leftPadChars(text, totalChars, padWithChar) { text = text + ""; padWithChar = (padWithChar) ? padWithChar : "0"; if (text.length < totalChars) { while (text.length < totalChars) { text = padWithChar + text; } } if (text.length > totalChars) { text = text.substring((text.length - totalChars), totalChars); } return text; } //當傳入之字串不為空值時, 則傳回補滿"0"後長度為10的股東戶號; 當傳入之字串為空值, 則回傳空值. function leftPadAccountNo(accountNO) { if(accountNO==""){ return ""; }else{ return leftPadChars(accountNO.trim(), 10, "0"); } } function checkTextAreaSize(object){ //取得欄位值 var value = object.value; var re = /[\u0000-\u00FF]+/; var strLen =0; for(i = 0; i < value.length; i ++){ if (!re.test(value.substr(i,1))){ strLen+=3; }else{ strLen+=1; } } object.rows = Math.floor(strLen/84+2); } function extractTag(text){ var reg = new RegExp('.*','g'); var r = new Array(3); r[0] = reg.exec(text)[0]; return r[0]; } function replaceLabel(label){ label = ReplaceAll(label,'',''); label = ReplaceAll(label,'',''); return label; } function ReplaceAll(strOrg,strFind,strReplace){ var index = 0; while(strOrg.indexOf(strFind,index) != -1){ strOrg = strOrg.replace(strFind,strReplace); index = strOrg.indexOf(strFind,index); } return strOrg } //取得該年度起日 function getAnnualStartDate(){ var today = new Date(); var dateYear = today.getYear()-1911; var defaultStartQueryDate = dateYear+"/01/01"; return defaultStartQueryDate; } //取得該年度迄日 function getAnnualEndDate(){ var today = new Date(); var dateYear = today.getYear()-1911; var defaultEndQueryDate = dateYear+"/12/31"; return defaultEndQueryDate; } //轉全形unicode function fullWidthTransition(obj){ var tmp = new Array(); var original = obj.value; var newStr = ""; var ranges = [ '\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF '\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F '\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF ]; for(var i = 0; i < original.length; i++){ if(original.charCodeAt(i) === 32){ tmp[i] = 12288; }else if(original.charCodeAt(i)<=127 && original.charCodeAt(i)>=33){//英數字 tmp[i] = original.charCodeAt(i)+65248;//轉全形unicode +65248 }else { tmp[i] = original.charCodeAt(i); } newStr += String.fromCharCode(tmp[i]); } obj.value = newStr; obj.value = obj.value.replace(new RegExp(ranges.join('|'), 'g'), ''); } //檢查是否為tdcc app function isWebview(){ var userAgent = navigator.userAgent; // 為tdcc app  return /ON_TDCC_APP/.test(userAgent); } // 券商版app function isSecWebview(){ var userAgent = navigator.userAgent; return /ON_TDCC_APP_SEC/.test(userAgent); } // e存摺app function isEpbWebview(){ var userAgent = navigator.userAgent; return /ON_TDCC_APP_EPB/.test(userAgent); } function checkEnterSubmit(e){ if(e.keyCode === hotkey_enter){ voteObj.checkVote(); } } function installCaUtility(){ var obj; if(document.getElementById("twobj")){ document.body.removeChild(document.getElementById("twobj")); } if(document.getElementById("cardobj")){ document.body.removeChild(document.getElementById("cardobj")); } // twca obj = document.createElement("object"); obj.codeBase = "/evote/cab/TDCCCapiATL.cab#version=3,1,1,6"; obj.onerror = function(){isTwobj=false;} //obj.onerror = function(){console.log('isTwobj error');} obj.id="twobj"; obj.classid = "clsid:D5F72F2E-7357-4FD8-84B3-85E304020019"; obj.VIEWASTEXT = "VIEWASTEXT"; document.getElementsByClassName("c-main")[0].appendChild(obj); // card obj = document.createElement("object"); obj.id="cardobj"; obj.onerror = function(){isCardobj=false;} //obj.onerror = function(){console.log('isCardobj error');} obj.codeBase = "/evote/cab/TDCCPKCS11ATL.cab#version=1,0,0,2" ; obj.classid = "clsid:BE78DEDF-3143-4DD5-A6A7-434102000019"; obj.VIEWASTEXT = "VIEWASTEXT"; document.getElementsByClassName("c-main")[0].appendChild(obj); } function openPdfLink(href){ var _openpdfsheme = "tdccmVote://openPdf?url="; if(isWebview()){ if(device.ios()){ location.href = _openpdfsheme+encodeURIComponent(href); }else if(device.android()){ window.mobile.OpenPdf(href); } }else{ window.open(href,'_blank'); } } function openBrowser(href){ var _openBrowserSheme = "tdccmVote://openBrowser?url="; if(isWebview()){ if(device.ios()){ location.href = _openBrowserSheme+encodeURIComponent(href); }else if(device.android()){ window.mobile.OpenBrowser(href); } }else{ window.open(href,'_blank'); } } function goCompatibility(url, type){ var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); var rootPath = ""; var isOldIE = (msie > 0 && (ua.indexOf("Trident") < 0 || (ua.indexOf("Trident") > -1 && ua.indexOf("Trident/4") > -1) )); // IE 9 以下 var isOldTdccApp = ((device.ios() || device.android()) && ua.indexOf("/ON_TDCC_APP") < 0); // 非RWD介接app switch(type){ case "desktop": if(isOldIE){ location.href = rootPath+url; } break; case "mobile": if(isOldTdccApp){ location.href = rootPath+url; } break; default: if(isOldIE || isOldTdccApp) { location.href = rootPath+url; } break; } } function getOffsetTodayDate(n){ //n=0, 代表為今天 var date = DateAdd("d",n,new Date()); var month = date.getMonth()+101; var day = date.getDate()+100; var offsetDay = C2RDate(date.getYear()+"" + month.toString().substring(1,3) + "" + day.toString().substring(1,3)); return offsetDay; } function GetURLParameter(sParam){ var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++){ var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } }