2011-06-29 52 views
3

我正在寫一個小型的jQuery表單例程,旨在幫助用戶填寫一組銀行排序代碼字段。有3個字段 - 當用戶在一個字段中填入2個數字時,光標會自動在下一個字段上聚焦()。問題與鍵控和shift +選項卡

然而,如果用戶決定將+標籤移回到前一個字段,則會出現問題。如果此字段已包含2個字符,則光標不會保留在該字段內,而是再次向前跳轉。

HTML:

<div class="formItem sortCode clearfix"> 
    <input type="text" maxlength="2"> 
    <input type="text" maxlength="2"> 
    <input type="text" maxlength="2"> 
</div> 

的jQuery:

var $sortCollection = $('.sortCode input'); 

$('.sortCode input').keyup(function(event) { 

    var sortValue = $(this).val();    
    var sortPosition = $sortCollection.index(this);  

    if (!(event.keyCode == 9 && event.shiftKey)) { 
    if (sortValue.length == 2 && sortPosition != 2) { 
     sortPosition += 1; 
     $sortCollection.eq(sortPosition).focus().select(); 
    } 
    } 
}); 

我有一種感覺,問題是與shift鍵被釋放,但我不知道什麼時候被觸發keyup事件做。請有人看看。

+0

因爲您是新手,請繼續並通過點擊您喜歡的答案旁邊的小'檢查'來回答這個問題。 – AndyL

回答

0

我想你想要的是忽略shift鍵點擊,只需添加

if (event.keyCode == 16) return; 

$('.sortCode input').keyup(function(event) { 

注意:這不會影響event.shiftKey

+1

感謝您的回覆。是的event.keyCode == 16做到了! –

+0

花了我幾個小時才發現這是愚蠢的換擋鍵,謝謝! – 2012-09-25 18:23:59

5

試試這個:

if (!(event.keyCode == 16 || event.keyCode == 9)) { 
    if (sortValue.length == 2 && sortPosition !== 2) { 
     sortPosition += 1; 
     $sortCollection.eq(sortPosition).focus().select(); 
    } 
} 
+0

工作!非常感謝。但是使用event.keyCode == 16到event.shiftKey有什麼不同?乾杯。 –

+0

我不確定。我無法弄清楚爲什麼它不適用於'event.shiftKey'。但我很高興它爲你工作。 – AndyL

0
$('.formItem input[type=text]').focus(function(){ 
    if ($(this).length == 2) { 
      $(this).next('.formItem input[type=text]').focus(); 
    } 
}); 

嘗試將此工作應用於您的代碼中,但未檢查按鍵,但焦點由輸入框的值控制。如果輸入框帶入焦點的長度爲2,則下一個輸入框被帶入焦點。這應該通過,直到找到一個不是長度爲2的輸入框。

+0

我認爲他遇到的問題是用戶無法編輯使用shift +選項卡鍵入的內容。因此,這不會更好。 – AndyL

+0

是的。如果當前字段的長度爲2,讓光標跳到下一個字段不是問題。問題是如果用戶shift-tab回到已經有2個字符的字段。我無法讓光標停留在該字段中。 –