로컬 개발 서버는 톰캣,
운영 및 테스트 서버는 JEUS를 사용하다 보니까
WAS 및 서버의 차이로 인해
JSP의 일부 동작이 일정하지가 않다.
톰캣에선 이상없이 작동하는데
JEUS에선 동작하지 않는 현상이 종종 발생했다.
요번에 일어난 input 박스에서 숫자만 입력하기도 그렇다.
자바스크립트 부분
function onlyNumber(event){ if((event.keyCode<48)||(event.keyCode>57)) { event.returnValue=false; } }
JSP FORM 부분
<input type="text" name="recentYear" id="recentYear" onkeypress="return onlyNumber(event);">
처음엔 위의 소스만 사용했다.
톰캣에서는 무난하게 작동.
하지만 JEUS 테스트 서버에 올리니 작동하지 않는 것이다.
무엇이 문제일까...-_-;
일단 onkeypress => onkeydown으로 변경.
javascript 부분도 수정했다.
function onlyNumber(event){ event = event || window.event; var keyID = (event.which) ? event.which : event.keyCode; if ( (keyID >= 48 && keyID <= 57) || (keyID >= 96 && keyID <= 105) || keyID == 8 || keyID == 9 || keyID == 46 || keyID == 37 || keyID == 39 ) { return; } else { return false; } } function removeChar(event) { event = event || window.event; var keyID = (event.which) ? event.which : event.keyCode; if ( keyID == 8 || keyID == 9 || keyID == 46 || keyID == 37 || keyID == 39 ) { return; } else { event.target.value = event.target.value.replace(/[^0-9]/g, ""); } }
JSP FORM부분
<input type="text" name="recentYear" id="recentYear" onkeydown="return onlyNumber(event);">
위와 같이 변경되니 정상작동.
위의 소스는 테스트해보니 톰캣에서도 정상작동한다.
removeChar는 가끔 사용자 중에 마우스 오른쪽 버튼 클릭 붙여넣기를
사용하시는 분들이 있어 onkeydown만 해놓으면 방어가 안된다.
그래서
<input type="text" name="recentYear" id="recentYear" onkeydown="return onlyNumber(event);" onmouseout="removeChar(event);">
onmousedown / onmouseup으로는 적용이 안되서
onmouseout을 소스에 적용했다.
이젠 톰캣과 JEUS에서 모두 숫자만 입력이 가능하다.