2011-08-15 2 views
2

내가 입력 텍스트 필드에 입력을 필터링하고에 뛰어 커서를 발생합니다입력 텍스트 필드는 예를 들어, IE와 크롬

그리고 비 제거와 같은 즉석에서 입력을 필터링하고 숫자.

$("#txtlevel").bind('keyup', function(evt) 
{ 
    var value = $(this).val(); 
    value = value.replace(/\D/g, ''); /* Remove any non-digit characters */ 
    if (value.length > 1) 
    { 
     value = value.replace(/^[ 0]/g,''); /* Remove any leading spaces or zeros */ 
    } 
    $(this).val(value); 
} 

Firefox에서는 잘 작동하지만 IE와 Chrome에서는 매 시점마다 커서가 입력 필드의 끝으로 이동합니다. 이것을 방지하거나 커서 위치를 재설정 할 수 있습니까? 나는 텍스트 필드를 위해 코드를 보았지만 텍스트 필드를 입력하지 않았다.

+0

의 끝으로 이동이 방법은 여기 나를 위해 잘 작동 링크입니다 나를 위해 작동하지 않습니다 http://jsfiddle.net/SJmCY/ – Kishore

+0

@Kishore. – Daveo

+0

숫자를 편집 할 때 커서가 여전히 텍스트 상자의 끝으로 이동합니다. 죄송합니다. 아래 응답 블록에 응답을 입력하십시오. 예제 입력 시나리오를 시도해보십시오. 그러면 그 문제를보아야합니다. – Mike

답변

3

keyup을 사용하고 regex replace (즉, value 설정)를 수행하면 커서가 끝까지 이동합니다. 당신의 목표를 허용하는 경우에만 숫자 키 (플러스 백 스페이스, 삭제),이 시도 :

$("#txtlevel").bind('keydown', function(event) { 
    // Allow only backspace, delete, left and right arrows, return and tab 
    if (event.keyCode == 46 || 
     event.keyCode == 8 || 
     event.keyCode == 37 || 
     event.keyCode == 39 || 
     event.keyCode == 13 || 
     event.keyCode == 9) { 
     // let it happen 
    } 
    else { 
     // stop the keypress if not a number 
     if (event.keyCode < 48 || event.keyCode > 57) { 
      event.preventDefault(); 
     } 
    } 
}); 

가 바인드 paste 이벤트, 붙여 넣기에 숫자가 아닌 이벤트를 취소하려면 :

$("#txtlevel").bind('paste', function(e){ 
    var value = $(this).val(); 
    value = value.replace(/\D/g, ''); /* Remove any non-digit characters */ 
    if (value.length > 1) { 
     value = value.replace(/^[ 0]/g,''); /* Remove any leading spaces or zeros */ 
    } 
    $(this).val(value); 
}); 
+0

그게 잘됐다! 나 또한 탭, 반환, 왼쪽 및 오른쪽 화살표를 추가하여 다음과 같이 표시됩니다. – Mike

+0

if (evt.keyCode == 46 || evt.keyCode == 8 || evt.keyCode == 37 || evt.keyCode == 39 || evt.keyCode == 13 || evt.keyCode == 9) { – Mike

+0

좋습니다! 나는 그것을 내 대답에 추가 할 것이다. – Mrchief

0

당신 커서 위치를 저장하고 복원 할 수 있습니다. 커서가 늘 텍스트

$("#txtlevel").bind('keyup', function(evt) 
{ 
    var pos = evt.target.selectionStart; // Save cursor position 
    var value = $(this).val(); 
    value = value.replace(/\D/g, ''); /* Remove any non-digit characters */ 
    if (value.length > 1) 
    { 
     value = value.replace(/^[ 0]/g,''); /* Remove any leading spaces or zeros */ 
    } 
    $(this).val(value); 
    evt.target.selectionEnd = pos; // Restore cursor position 
}