2011-06-29 8 views
3

私は、ユーザーが銀行のソートコードフィールドのグループを記入するのを助けるために設計された小さなjQueryフォームルーチンを書いています。 3つのフィールドがあります。ユーザーが1つのフィールドに2つの数字を入力すると、カーソルは次のフィールドに自動的にfocus()されます。keyupと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

は、私が何をしたいが、キークリックをシフト無視だけ追加することだと思います

if (event.keyCode == 16) return; 

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

ノートの後:これはevent.shiftKey

+1

ご返信ありがとうございます。はいevent.keyCode == 16トリックをやった! –

+0

ダムのシフトキーであることを確認するために時間をかけました。ありがとうございました! –

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

私は彼が持っている問題は、シフト+タブでタイプされたものを編集できないことだと思います。したがって、これはそれほど良くはありません。 – AndyL

+0

はい、そうです。現在のフィールドの長さが2の場合、カーソルを次のフィールドにジャンプさせることは問題ではありませんでした。問題は、すでに2文字があるフィールドにユーザがシフトタブを戻した場合です。そのフィールドにカーソルを置くことができませんでした。 –