후원회원 가입 신청을 위해 주민등록번호 앞의 6자리를 입력 받으려 하는데요.
write_form.html에서 코드는 다음과 같이 했습니다.
유효성 검사를 위한 스크립트 함수는 checkSNumber()이구요.
<!--@if($val->eid=='s_number')--> <input name="extra_vars{$val->idx}" class="itx" type="number" maxlength="6" onsubmit="checkSNumber(this)"> <p>{$val->desc}</p> <script> function checkSNumber(obj) { var val = obj.value; var yy = val.substr(0,2), mm = val.substr(2,2), dd = val.substr(4,2), msg = '\n주민등록번호를 다시 입력해주세요.'; if(val.length!=0) { // 글자가 입력되지 않으면 해당 사용자 정의가 필수항목이므로 등록이 안 됨 if(val.length!=6) { alert('6자리를 모두 입력하셔야 합니다.' + msg); check2Error(obj); } else { if(mm<01||mm>12) { alert('12월을 넘는 숫자를 입력하셨습니다.' + msg); check2Error(obj); } if(dd<01||dd>31) { alert('31일을 넘는 숫자를 입력하셨습니다.' + msg); check2Error(obj); } if((mm==04||mm==06||mm==09||mm==11)&&dd==31) { if(mm!=11) mm = mm.slice(1); alert(mm+'월에는 31일이 없습니다.' + msg); check2Error(obj); } if(mm==02) { var isLeap = (yy%4==0&&(yy%100!=0||yy%400==0)); if(dd==30||dd==31) { alert('2월에는 ' + dd + '일이 없습니다.' + msg); check2Error(obj); } if(dd==29&&!isLeap) { alert(yy+'년 2월에는 29일이 없습니다.' + msg); check2Error(obj); } } } } } function check2Error(o) { o.focus(); return false; } </script> <!--@end-->
여기서 input 태그에 checkSNumber(this)함수를 onsubmit 속성으로 삽입을 해보기도 했는데요.
게시판 모듈이어서 그런지 form 태그에 onsubmit으로 걸려 있는 proFilter함수 외에는 등록 시에 유효성 검사가 되지 않더라구요.
글 등록할 때 checkSNumber 함수로 해당 확장변수 입력값의 유효성도 동시에 검토하고 싶은데요, 다른 방법이 있을지 궁금합니다.
혼자 파보다가 꼼수로 대강 돌려 막았습니다;;;
히든 인풋을 만들고, 비저블 인풋에 키업이 되면 히든 인풋으로 밸류가 복사됩니다.
이때 키업 이벤트에서 월일별 허용범위를 넘는 값이 전달되면 히든 인풋의 밸류는 비워집니다.
유효하지 않은 번호를 입력하게 되면 글 등록시에 '주민등록번호 값은 필수 입니다.' 같은 얼러트가 뜨면서 등록이 중지되죠.
그리고 이용자의 입력값이 어떤 점에서 잘못됐는지를 알려주기 위해, p태그의 텍스트 값을 활용합니다.
조건에 따라서 유효성 검사 결과를 띄웁니다.
어쨌든 procFilter 때문에 애먹다가 꼼수로 빠지게 됐습니다 흐규흐규
(나, 이래도 되는 거니?)