2011-10-19 2 views
0

자바 스크립트를 사용하여 다양한 텍스트 입력 필드의 문자를 클라이언트 쪽 유효성 검사 형식으로 제한하고 사용 편의성을 향상 시켰습니다. 나는이 작업을 수행하려면 다음 코드를 사용하고 있습니다 :자바 문자 제한 - 유효하지 않은 문자가 일시적으로 표시됨

나는 때 onKeyPress =이 함수를 호출
function validNumbers(caller) { 
    var exp = /^[\d.]+/g; 
    var str = ''; 
    if (caller.value.match(exp)) { 
     str = caller.value.match(exp).toString(); 
    } else { 
     str = ''; 
    } 
    str = str.replace(/\D/g,''); 
    caller.value = str; 
} 

"validNumbers (이);" 대부분의 경우 매력처럼 작동합니다. 문제는 필드에 유효하지 않은 문자를 입력하면 해당 필드의 값이 (자바 스크립트의 관점에서) 업데이트 된 것처럼 보이지만 다음 키를 누르기 전까지 문자가 남아 있다는 것입니다. 다음 키가 유효하지 않은 경우에도 시각적으로 다음 키의 값으로 대체됩니다. 원하는 효과는 잘못된 키를 누를 때 잘못된 값이 시각적으로 표시되지 않는다는 것입니다. 어떻게해야합니까?

편집 : 나는 올바른 길로 나를 잡았 기 때문에 아래의 대답을 선택했습니다. "! @ # $ %^& *() _ +"과 같은 문자를 방지하기 위해 제외 된 이벤트 목록에 e.shiftKey를 추가해야했지만 그 사실을 알 수 없었습니다. 혼자서.

+0

문자 단위로 사용자 입력을 제한하는 것은 ** anti ** 유용성 기능입니다. 필드에 원하는 것을 사용자에게 알려주는 것이 좋습니다 (예 : 화면상의 "숫자 만"또는 유사). 그런 다음 적절한 시간 (양식 제출시기)에 유효성을 검사하십시오. 그들이 올바른 가치를 얻는 방법에 대해 걱정하게하십시오. – RobG

+0

서버 쪽 유효성 검사를 수행 할 것이지만 텍스트 필드에 입력 할 수있는 문자를 제한함으로써, 나는 훨씬 더 많은 것을 할 수있는 명백한 문제를 찾기 위해 양식을 되돌릴 필요가 없도록 저장하여 시간을 절약 할 수 있습니다 쉽게 그들을 돌봐. 원하는대로 입력 할 수 있도록 허용하면 작동하는 것과 작동하지 않는 것에 대한 즉각적인 피드백을 얻지 못합니다. 즉, 잘못된 문자 하나에 대한 모든 텍스트 필드를 검색하는 것을 의미 할 수 있습니다. 시간 문제는이 프로젝트의 가장 큰 초점입니다.이 양식을 매일 수백 번 사용할 때가 있습니다. – Adam

+0

유효하지 않은 문자가 입력 된 경우 입력 주위에 빨간색 테두리를 두는 것과 같은 다른 방법이 있습니다. 나는 문자 입력이 제한되어있는 곳에서 실수로 잘못된 문자를 입력하는 경우 삭제를 눌러 삭제하지만 영리한 프로그래머는 이미 그렇게 했으므로 대신 유효한 문자를 삭제합니다. 오류를 찾으려면 어떻게해야합니까? 또한 붙여 넣기를 중지하거나 잘못된 문자를 끌어다 놓는 방법은 무엇입니까? – RobG

답변

1

함수에서 값을 텍스트 필드에 입력하고 평가 한 후에 값을 지우고 있습니다. 대신 텍스트 필드에 입력되지 못하도록해야합니다. 이 작업을 수행하려면를 keyDown의 preventDefault() 방법을 사용하려면 :

onkeydown="function(e) { validNumbers(e); }" 

function validNumbers(e) { 
    if (e.keyCode == 1 || e.keyCode == 2 ... etc) { 
     e.preventDefault(); 
    } 
} 

이 이제까지 입력 필드를 입력에서 특정 문자 (reference here)을 차단합니다. 이렇게하면 복사 및 붙여 넣기가 차단되지 않으므로 전체 문자열 'onpaste'를 평가하거나 유사한 이벤트 처리기로 'onpaste'를 방지해야합니다.

이것은 크로스 브라우저 솔루션이 아니지만 발을 넉넉하게해야합니다. 실제 예를 보려면 JSFiddle을 참조하십시오.

+0

나는 다음과 같이 바꿀 수 있다고 확신한다 :''function (e) {validNumbers (e);}''''validNumbers ''' – qwertymk

관련 문제