2013-10-05 15 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」,這些都會觸發keydown。我認爲你需要澄清一下你想要發生的事情。 – smerny

+0

那麼,我遵循你在最後一個(刪除)註釋中說過的話,並使用'var reMatch =/[! - 〜] /。exec(String.fromCharCode(e.which));'這是有效的。 'shift'被忽略之後,會傳遞'!'的ascii來觸發滾動。但箭頭鍵仍然以某種方式觸發滾動,有沒有辦法解決這個問題呢? – Sourabh

+0

我發佈了一個適用於字母的答案,按數字鍵(包括按住shift鍵),然後按數字鍵。這是否涵蓋你在找什麼?此外,你會發現'fromCharCode(e.which)'不會返回你期望的許多密鑰。 – smerny

回答

1

e.which給出了所按鍵的數字表示。數字鍵是由48-57(或96-105鍵盤上)表示,而字母用65-90

代表試試這個:

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(); 

你可以爲它這樣做是爲了與任何的文本字段創建一個輸入工作:

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

但是這不會對IE版本低於9.但如果你看看,你可以找到墊片工作。 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

謝謝!但我只是好奇,爲什麼我在上面的評論重新匹配箭頭鍵? – Sourabh

+0

'String.fromCharCode()'並不真正返回您期望的許多事情。如果您想查看實際返回的內容,可以發出警報。 – smerny

+0

@Sourabh,我添加了一些您可能感興趣的不同解決方案。 – smerny

相關問題