onKeypress에서 keyCode값

국내에 웹 사이트들이 웹 표준을 지키고 OS나 브라우저와 관계 없이 접근성을 향상 시키기 위한 사이트 버그 신고 및 문제 해결을 위한 게시판입니다.
Post Reply
beta31

onKeypress에서 keyCode값

Post by beta31 »

안녕하세요?
cross bowsing 웹개발을 하느라 애먹고 있습니다.

onKeyPress Event에서 keyCode가 IE랑 FF는 서로 다르게 먹고 있네요.

Code: Select all

<input id="oEmpno" name="empno" type="text" class="textfield" size="15" maxlength="10"  onkeypress="cfKeyPress(event);" >
....

function cfKeyPress(e){
    var objCode = (document.all)?event.keyCode:e.keyCode; 
    alert(objCode);
}
이렇게 테스트해보면 FF에서는 어떤 값을 넣던지 0 이 나옵니다.

기존의 키보드 입력값을 바로 비교해서 숫자값만 넣으려고 하는건데
onKeyDown은 일단 값을 입력시키고 나서 비교하려고 해서 event.keyCode = 0 은 안 먹는 것 같고

Code: Select all

    
    if (window.event) 
       evt= window.event;
       
    var lkeycode = evt.keyCode;

    if( !((48 <= lkeycode && lkeycode <=57) && lkeycode != 8 && lkeycode != 46) )
        if( document.all){
            evt.keyCode = 0;
        }else{
            evt.preventDefault();
    }
이렇게 구현해 봤는데 뭐 잘 안 먹습니다.

혹시 이 onKeyPress 를 IE와 FF에서 동시에 잘 사용할 수 있는 방법이 있을까요?
박민권
해커
해커
Posts: 724
Joined: 2005 01 31 22:33 55
Location: 대한민국
Contact:

Post by 박민권 »

onkeypress일 경우 불여우에서는 charCode를 통해서 키코드값을 알아낼 수 있습니다.
아래 소스를 참고하세요.

Code: Select all

<script type="text/javascript">
function KPress(e){
	if(window.event){
		var code = window.event.keyCode;
	}
	else{
		var code = e.charCode;
	}
	
	alert(code);
}

function KDown(e){
	if(window.event) e = window.event;
	alert(e.keyCode);
}
</script>

<input type="text" onkeypress="KPress(event)"/>
<input type="text" onkeydown="KDown(event)"/>
모질라의 DOM event.keyCode에 관해서 아래와 같은 설명이 있습니다.
keyCode is always set in the keydown and keyup events. In these cases, charCode is never set.
keyCode는 항상 keydown과 keyup 이벤트에서 생기며 이 상황에서 charCode는 절대 생기지 않는다는군요.(허접번역;; OTL)

원문:http://developer.mozilla.org/en/docs/DOM:event.keyCode

아래의 주소도 참고해보세요.
http://www.brainjar.com/dhtml/events/default4.asp
beta31

감사합니다. 덕분에 해결했습니다.

Post by beta31 »

아하 그렇군요.
덕분에 다음과 같이 숫자만 입력받는 함수를 만들었습니다.

Code: Select all

function cfNumberOnly(e) {
    if(window.event){ 
        e = window.event
        var lkeycode = e.keyCode; 
    } 
    else{ 
        var lkeycode = e.charCode; 
    } 

    if( !(48 <= lkeycode && lkeycode <=57) && lkeycode != 0 &&  lkeycode != 32){
        if( window.event ){
            e.keyCode = 0;
        }else{
            e.preventDefault();
        }
    }
}
더 좋은방법 있으면 지적바랍니다.
Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests