2011-12-22 14 views
3

私は基本的な数量フィールドを持っており、ユーザーはキーボードの上下に基づいてこの入力ボックス内の数字を増減できます。Jquery入力テキストの上下の矢印で数字を増減します

次のから:EndangeredMassaキーボードコードhttps://stackoverflow.com/a/375426/560287でこれを追加するにはどうすればよいですか? somethingはあなたの入力(S)と一致するセレクタである

var keynum = 0; 

if(window.event) { keynum = e.keyCode; } // IE (sucks) 
else if(e.which) { keynum = e.which; } // Netscape/Firefox/Opera 

if(keynum == 38) { // up 
    //Move selection up 
} 

if(keynum == 27) { // down 
    //Move selection down 
} 
+1

はあなたがtangle.js見てきましたか?それは数字フィールドを扱う本当に良い方法を持っています – CamelCamelCamel

+0

私はあなたが今必要と思うのはthis.value ++とthis.value--それぞれ上向き矢印と下向き矢印の場合、this.value = this.value.toInt( )++。 – CBusBus

答えて

6
//cache our input since we will be working with it each time an arrow key is pressed 
var $input = $('input'); 

//bind the the `keydown` event for the `document` object which will catch all `keydown` events that bubble up the DOM 
$(document).on('keydown', function (event) { 

    //up-arrow (regular and num-pad) 
    if (event.which == 38 || event.which == 104) { 

     //make sure to use `parseInt()` so you can numerically add to the value rather than concocting a longer string 
     $input.val((parseInt($input.val()) + 1)); 

    //down-arrow (regular and num-pad) 
    } else if (event.which == 40 || event.which == 98) { 
     $input.val((parseInt($input.val()) - 1)); 
    } 
}); 
を動作するはずです

ここはデモです:jQueryのevent.whichcharCode/keyCode性質を正規化することを

注:

target 
relatedTarget 
pageX 
pageY 
which 
metaKey 

出典:http://api.jquery.com/category/events/event-object/

クエリはクロスブラウザ 一貫性のプロパティを次のように正規化

+0

"=="の使用をプロポジション停止! :P – jbabey

+0

@jbabey実際、誰かがそれを持ち出してうれしいですが、改善は何ですか?私はそのトリプルequalsは、変数の型が同じである必要がありますが、同じを実行する必要があります:http://jsperf.com/double-equals-vs-tripple-equals – Jasper

+0

等価の代わりにアイデンティティ演算子を使用する少なくとも理論的には、より良いコードを書いてください:P 私は、VB.net/C#でオプションを厳密にオンにすることと同じです。他の方法で動作するかどうかに関係なく常に使用することは良い習慣ですあなたがお尻にあなたをかむフリンジケースを避けてください。 – jbabey

0
$("something").keyup(function(e){ 
    var keynum = 0; 

    if(window.event) { keynum = e.keyCode; } // IE (sucks) 
    else if(e.which) { keynum = e.which; } // Netscape/Firefox/Opera 

    if(keynum == 38) { // up 
     //Move selection up 
    } 

    if(keynum == 27) { // down 
     //Move selection down 
    } 
}); 

+0

jQueryはどのブラウザでも動作するようにどのプロパティを正規化すると思います。 –

+0

十分に公正です。実際にコード自体を見ていなかったので、 'keyup'でそれを守る方法をもっと詳しく示しました。 –

0

あなたのコードは正しく見えます。あなただけの

$('#itemId').keyup(function(e){ 
    /*YOUR CODE*/ 
}); 
1

...イベントにコードをバインドする方法を疑問に思っている場合は行うことができます:

<input type="text" id="yourinput" value="0"> 

$(document).on("keypress", '*', function(e) { 
    if (e.keyCode == 38) { // up 
     $('#yourinput').val(parseInt($('#yourinput').val(), 10) + 1); 
    } 

    if (e.keyCode == 40) { // down 
     $('#yourinput').val(parseInt($('#yourinput').val(), 10) + 1); 
    } 
}); 

ここフィドルhttp://jsfiddle.net/mSCBL/1/

+0

(e.keyCode == 40){//ダウン $( '#yourinput')と書いたと思います。 ); } の代わりに の代わりにif(e.keyCode == 40){// down $( '#yourinput').val(parseInt($( '#yourinput')。val()、10)+1) ; } –

0

をこれが

if(keynum == 38) { // up 
    this.value = parseInt(this.value)-1; 
} 

if(keynum == 27) { // down 
    this.value = parseInt(this.value)+1; 
} 
1
$("input").keypress(function(event) { 
     var val=$(this).val(); 
     if (event.keyCode== 38) { 
      val++ 
     $(this).val(val) 
     } 
     if (event.keyCode== 40) { 
      val-- 
      $(this).val(val) 
     };  
}); 
関連する問題