jQueryUIで増減ボタン付きのテキストボックス
パッケージ開発担当のよみです。
最近旅行にいけてないです連休にでも行きたいです。
さて、お仕事でjQueryUIのspinnerを使う機会があったので復習をかねて書きたいと思います。
全然難しくないのですが、デザインを細かく変えたいとか、数値の変化を細かく制御したいとかはかなりメンドウです。
いい方法があるのかも知れませんが。。。
とりあえず作る
jQueryUI導入の話は省略します、
以下のようにspinnerを設定してあげれば後はjQueryUIが勝手にやってくれます。
stepで増減数値、max/minで上限下限、numberFormatでどういう数値なのかが設定できます。
<link rel="stylesheet" href="jquery-ui-1.10.4.custom.css"> <script src="jquery-1.10.2.js"></script> <script src="jquery-ui-1.10.4.remote_custom.min.js"></script> <script type="text/javascript"> $(function() { //0~10を0.1刻み $("#value").spinner({ step: 0.1, max: 10, min: 0, numberFormat: "n", ※1 }); }); </script> <label for="price"></label> <input id="value" name="value" value="1.5">
上下どちらを押したか知りたい時
「spin」は数値が変化する前に発生するのでそこで、
変化前と変化後の値を比べて上下を判断する事ができます。
※1 spin: function(event, ui){ //現在の値-変更後の値 if (($(this).val()-ui.value) < 0) { //上が押された }else{ //下が押された } ※2 }
以降のイベントを発生させない
「step」に設定した値ではなく、自分で制御する場合数値が変更されないように
以降発生するイベントを動かないようにする。
※2 event.preventDefault(); event.stopImmediatePropagation();
増減ボタンのみ有効にする
お仕事で使用した時、ユーザーに手動入力して欲しくないとの要望だったので、
以下のようにすれば、スピナーのみ有効になるようです。
$("#value").attr("readonly",true);
最後に
この機能のことをスピナーという名前だとはじめて知りました、
名前を知らなかったので調べるのに苦労しました。。。
イベント部分ですが、連続クリックは問題ないですが
長押しした際「spin」のイベントが飛ばされるような挙動が多々確認できました。
自分で制御している場合、かなり問題になってきますね。。。