2012-07-03 33 views
0

場景:jQuery:使用Shift + Tab的問題onkeydown

我們有3個框可以接收任何字母或數字組合作爲輸入。第一個框可以有最多3個字符,第二個框必須正好7,最後需要爲2.

我試圖讓用戶從第一個框到一個jQuery函數到第第二次,他們鍵入了3個字符,然後從第2個到第3個7個字符,然後從第3個到2個字符後的按鈕。我也希望這個功能是很普通的,這樣我可以從其他控件使用它,所以我設置了以下內容:

function moveOn(e, objID, nextID, howLong) { 
     if (!(e.keyCode == 9)) { 
      if ($(objID).val().length >= (howLong)) { 
       $(nextID).select(); 
      } 
     } 
    } 

是什麼原因造成我適合是Shift + Tab鍵。我試圖捕捉它,如果(keyCode == 9)檢查,但因爲它是keyup,shift鍵可能會出現在Tab之前的一秒,在這種情況下事件觸發的Shift鍵(16),而不是標籤(9)。我不能忽略所有Shift捕捉,因爲用戶至少會在其中一個字段中使用大寫字母。

Shift + Tab在他們輸入第一個值時發揮作用,然後意識到他們犯了一個錯誤,所以他們想回去。我們的員工是非常鍵盤驅動的,所以他們幾乎總是會使用Shift + Tab來嘗試返回並修復這個問題。

是否有一些技巧我錯過了使這項工作流暢?

TIA。

+0

只是FYI,你想給'focus()' – TheZ

+0

當你想在當前字段中輸入正確的字符數時自動將焦點移動到下一個字段。那麼移位或標籤進入它的位置呢?我明顯錯過了一些東西... – Utkanos

+0

爲什麼我要使用focus()select()。如果在下一個字段中已經有一個值,那麼我希望立即選擇它,以便他們可以輸入它。 focus(),imo,總是假設你只打算追加當前的值......我發現通常不是這種情況。 – cavillac

回答

1

我不認爲忽略shift(16)的關鍵代碼會導致任何問題。當用戶釋放輪班時,它會忽略它。然後,它會針對他們按下的任何其他按鍵發起單獨的onkeydown事件,而不管換檔是否仍然被按下。你可以在這裏測試:http://asquare.net/javascript/tests/KeyCode.html

+0

試圖... e.shiftKey的作品,但它並不總是註冊keyCode爲9 ...有時它註冊16(Shift鍵)在這種情況下,我的if()不捕捉。 – cavillac

+0

好的。我已經更新了我的答案。 – Grinn

+0

這就是答案。我被卡在這個概念上,我不能忽略Shift鍵,因爲它可能與實際的字母數字鍵擊結合發生,但事實是它發生在字母數字鍵擊之外,這意味着我可以忽略它,因爲字母數字將激發自己的事件。 因爲我用簡單的警報進行測試的方式回來了,所以我掛斷了它......因爲警報正在擾亂流程,而且我從來沒有看到第二次擊鍵......只是Shift。 謝謝 – cavillac