2013-10-05 2 views
0

컨테이너를 스크롤하는 JS 코드는 영숫자 또는 기호를 눌러 작성합니다. ,영숫자 또는 기호를 누르면 스크롤됩니다.

코드에 어떤 문제가 있습니까 ... 등 입력

var $q = $('input#q'); 
$q.on('keydown', function (e) { 
    var reMatch = /[!-~]/.exec(e.which); 
    if (typeof reMatch != 'null' && reMatch.length > 0) { 
     $('#container').animate({scrollTop: 410}, 500); 
     $(this).off('keydown'); 
    } 
}).focus(); 

그러나 이것은 변화, 탭 등의 모든 키에 대한 실행 :

이 내가 생각 해낸 무엇인가?

+0

사용자가 키를 눌렀을 때 (해제하기 전에) 'keydown'이 트리거됩니다. 'e.which'는 키를 눌렀다는 숫자 표현이며,'!'또는'~'와 같은 문자를 포함 할 수 없습니다. 또한 '!'문자를 얻으려면 "Shift"를 누른 다음 "1"을 눌러야 만 키 입력이 시작됩니다. 나는 당신이 원하는 것을 정확히 밝힐 필요가 있다고 생각합니다. – smerny

+0

글쎄, 내가 마지막으로 (삭제 된) 주석에서 말한 것을 따라 왔고'var reMatch =/[! - ~] /. exec (String.fromCharCode (e.which));를 사용했다. 'shift'가 무시 된 후에 스크롤을 유발하는'!'의 ascii가 전달됩니다. 그러나 화살표 키는 여전히 스크롤을 발생 시키는데,이 문제도 해결할 수있는 방법이 있습니까? – Sourabh

+0

글자에 대한 답변을 게시하고 숫자 키 (교대로 누르고있는 경우 포함)를 누른 다음 숫자 키를 누릅니다. 이것은 당신이 찾고있는 것을 커버합니까? 또한,'fromCharCode (e.which)'는 많은 키들에 대해 기대 한 것을 반환하지 않을 것입니다. – smerny

답변

1

e는 눌린 키의 숫자 표현을 제공합니다. 당신은에이 작업을 수행 할 수

var $q = $('input#q'); 
$q.on('keydown', function (e) { 
    var val = e.which; 
    var num = (val > 47 && val < 58 || val > 95 && val < 106); 
    var letter = (val > 64 && val < 91); 
    if (num || letter) { 
     $('#container').animate({scrollTop: 410}, 500); 
     $(this).off('keydown'); 
    } 
}).focus(); 

: 문자가이 시도 65-90

으로 표시하는 동안 숫자 키는 48-57 (또는 키패드의 96-105)로 표시된다

var $q = $('input#q'); 
$q.on('input', function (e) { 
    $('#container').animate({ 
     scrollTop: 410 
    }, 500); 
    $(this).off('input'); 
}).focus(); 

을하지만, 이것은 당신이 보면, 당신은 심 찾을 수 있지만 적은 9보다 IE 버전에 대해 작동하지 않습니다 : 텍스트 필드에 입력을 생성 아무것도 작동합니다. Here is an example


당신은이 작업을 수행 할 수 있지만 (사용자가 키를 해제 할 때까지) 사용자가 오랜 시간 동안 아래로 키를 누른 경우 즉시 이동하지 않을 것입니다.

var $q = $('input#q'); 
var qval = $q.val() 
$q.on('keyup', function (e) { 
    if(qval != $q.val()) { 
     $('#container').animate({scrollTop: 410}, 500); 
     $(this).off('keyup'); 
    } 
}).focus(); 
+0

고마워! 그러나 나는 단지 호기심이다, 왜 위의 코멘트에 내 re가 화살표 키와 일치합니까? – Sourabh

+0

'String.fromCharCode()'는 실제로 많은 것을 기대하지 않습니다. 실제로 돌아 오는 것을보고 싶다면 경고 할 수 있습니다. – smerny

+0

@Sourabh, 내가 관심을 가질만한 몇 가지 해결책을 추가했습니다. – smerny

관련 문제