2009-12-23 1 views
2

가입 폼에 JS 유효성 검사를 추가하기 시작했으며 사용자 이름 입력 필드를 Twitter 스타일 (jQuery 사용)으로 원합니다. 이는 입력이 특정 문자로 제한되고 다른 문자가 나타나지 않는다는 것을 의미합니다. jQuery를 사용하여 입력 필드에서 사용 가능한 문자를 실제로 제한하는 방법은 무엇입니까?

지금까지, 나는이있어 :

jQuery(document).ready(function() { 
jQuery('input#user_login').keyup(function() { 
    jQuery(this).val(jQuery(this).val().replace(/[^a-z0-9\_]+/i, '')); 
    }); 
}); 

이 솔루션은 작동하지만 문제는 잘못된 문자가 한 사용자가 키를 공개하지 않은로 표시한다는 것입니다 (내 끔찍한 영어 실례 !) keyup 이벤트가 트리거되지 않습니다. 문자가 입력 필드에서 잠시 깜박 인 다음 사라집니다.

이상적인 솔루션은 Twitter에서하는 방식입니다. 캐릭터는 한 번도 표시되지 않습니다.

어떻게하면됩니까 ?? 나는 입력을 어떤 식 으로든 가로 채야 할 것 같다.

감사합니다. 대신의 keyup

을 제외하고
jQuery('input#user_login').keydown(function() { 

의를 keyDown 사용

+0

http://bassistance.de/jquery-plugins/jquery-plugin-validation/ 시도해 보셨습니까? – Kezzer

+0

사용자는 코드를 조작하고 원하는 것을 보낼 수 있으므로 서버 측 보안 및 검사가 필요합니다. 물론 – Yossi

+2

! 이것은 사용자의 편의를위한 것입니다! –

답변

3

, 당신은 keypress을 사용해야합니다.

<input type="text" id="alpha"> 


<script type="text/javascript"> 

function alphaFilterKeypress(evt) { 
    evt = evt || window.event; 
    var charCode = evt.keyCode || evt.which; 
    var charStr = String.fromCharCode(charCode); 
    return /[a-z]/i.test(charStr); 
} 

window.onload = function() { 
    var input = document.getElementById("alpha"); 
    input.onkeypress = alphaFilterKeypress; 
}; 

</script> 
+0

고마워, 그게 뭐야, 당신의 약간의 코드를 작성하고, 제 응답을 확인하십시오. –

3

보십시오 : 당신 선택은 그것이 필요 이상 느립니다. ID는 고유하며 빠른, 그래서

jQuery('#user_login').keydown(function() { 

충분해야

당신은 당신이를 고려하고,

if (event.keyCode == ...) 

또한 발에 할당하기 전에, iself 키 코드를 캡처 고려하는 것이 좋습니다 alt, ctls 및 shift 키? 당신은 사용자가 아니라 처리됩니다 특정 키보다 입력 할 수있는 문자를 제한하려면 그 키 코드가 아닌 문자 정보를보고하는 유일한 이벤트입니다으로

if (event.shiftKey) { 

if (event.ctrlKey) { 

if (event.altKey) { 
+0

keydown 사용이 작동하지 않습니다. 입력이 jQuery ('input'). var() 메소드에 도착하지 않았으며 잘못된 입력은 SECOND 키 입력 후에 만 ​​바뀐 것 같습니다. 그래서 어떤면에서는 효과가 없습니다. –

+0

그럼, 확인하기 위해, 키 업, 키 다운 및 키 누르기가 작동하지 않습니까? –

+0

편집 됨 - event.keycode를 캡처 한 것으로 간주 했습니까? –

-2

당신은 입력과 암호의 최대 길이 속성을 사용할 수 있습니다 : : 여기에 (jQuery를 사용하지 않고) 모든 주요 브라우저에서 바로 AZ 문자로 문자를 제한하는 솔루션입니다 info (즉, 실제로 트위터를 수행하는 방법).

+0

-1. 그것은 OP가 요구하는 것이 아닙니다. –

+0

"입력이 특정 문자로 제한되고 다른 문자가 나타나지 않는다는 것을 의미합니다." 나는 그것이 보통의 html로 훨씬 쉽고 빠르며 복잡한 JS 루트를 사용해야하는 이유는 무엇이라고 생각합니까? – Januz

+0

nope. 나는 maxlength 속성을 잘 알고 있습니다. 입력 필드에 CERTAIN 문자가 표시되지 않도록하고 싶었습니다 (! "/ $ &). –

1

감사합니다. @TimDown이 문제를 해결했습니다! 편집을 위해 백 스페이스와 화살표를 사용할 수 있도록 코드를 약간 수정했습니다. 코드 서식을 사용하려면 회신을 게시합니다.

대단히 감사합니다.

function alphaFilterKeypress(evt) { 
    evt = evt || window.event; 

    // START CHANGE: Allow backspace and arrows 
    if(/^(8|37|39)$/i.test(evt.keyCode)) { return; } 
    // END CHANGE 

    var charCode = evt.keyCode || evt.which; 
    var charStr = String.fromCharCode(charCode); 

    // I also changed the regex a little to accept alphanumeric characters + '_' 
    return /[a-z0-9_]/i.test(charStr); 
} 

window.onload = function() { 
    var input = document.getElementById("user_login"); 
    input.onkeypress = alphaFilterKeypress; 
};