[jQueryプラグイン] 増減ボタン付きの数値のみ入力可能テキストボックス

更新:

WEBページのテキストボックスに数値のみを入力させたいときがあると思います。HTML5からは<input>要素にtype="number"という属性を加えることで数値入力に特化した入力エリアを作ることができるようになりました。

このような入力エリアです。

しかしこの要素、実は使い勝手があまりよくありません。その主な要因として、WEBブラウザによって見た目や動作が共通ではないという点が挙げられます。入力できる文字の種類、増減ボタンの表示の有無、マウスホイール回転による値の増減をサポートするか、フォーカスが外れた時の処理、など使うWEBブラウザによって差異が多くあります。この辺の違いについての詳細は別の記事にまとめましたのでそちらをご覧ください。

[参考] [HTML] <input type="number">のブラウザ別の動作と表示の違いまとめ

そこで、WEBブラウザ間での見た目や動作の差をできるだけ吸収し、かつ新たな機能を追加した数値のみ入力可能なテキストボックスをjQueryプラグインとして作成したので、ここで公開します。なお、「数値のみ入力可能」としていますが、一部のWEBブラウザではテキストボックスにフォーカスがある状態では条件により数値以外も入力できてしまいますが、フォーカスが外れた時に数値への変換が行われます。

実際のプラグインの表示デモ

数値の入力方法は、増減ボタン、上下矢印キー、マウスホイール回転(※)、直接キーボード入力、右クリックメニュの貼り付け、の5つです。増減ボタン、上下矢印キーを長押ししたときは、押している間は数値が変化し続けます。この辺は<input type="number">要素と同じように作っています。

※…Microsoft Edgeのみマウスホイール回転での数値入力に対応していません。

特徴

  • 数値と先頭のマイナス記号以外は入力できないようになっています。(※)
  • フォーカスが外れた時に値のチェックが行われ、空文字もしくは数値として認識できる文字列に変換されます。
  • 数値の上限、下限、増加値、デフォルト値、初期値を設定できます。
  • 空文字の許可/不許可を指定できます。
  • 増減ボタンが大きく、押しやすくなっています。
  • JavaScriptで値を取得するとき、数値型(もしくはnull)で返すので、別途値チェックや型変換を行う必要がありません。
  • 値が変化したときのイベント設定を行うことができます。

※…IMEを無効にできるWEBブラウザは数値以外のキー入力を無視します。IMEを無効にできないWEBブラウザ(Google Chrome)は、半角モードでの入力のときは数値以外のキー入力を無視しますが、全角モードで入力を行ったときは数値以外の文字入力もできてしまいます。その場合も、フォーカスが外れたときに値のチェックが行われます。このとき、全角数値は半角数値に変換されます。

動作確認済みWEBブラウザ

以下のWEBブラウザで正しく動作することを確認しております。Microsoft EdgeとGoogle Chromeは一部機能の制限があります。詳細は「実際のプラグインの表示デモ」と「特徴」の項目を確認下さい。

確認済みWEBブラウザ
  • Internet Explorer 11
  • Google Chrome 75
  • Firefox 67
  • Microsoft Edge 44

ダウンロード

jQuery.numInput ver1.0.0

ライセンス : GPL v3

Download

使用方法

▼最初にJavaScriptファイルとCSSファイルを読み込みます。jQueryプラグインですので、jQueryスクリプトファイルを最初に読み込む必要があります。読み込むファイルが増えるのが嫌な方は、ファイルの中身をコピーして別に読み込むファイルの末尾にペーストしてあげてもかまいません。

HTML

<script src="(jQueryスクリプトファイルのパス)"></script>
<script src="jquery.numInput.js"></script>
<link rel="stylesheet" href="jquery.numInput.css">

ファイルパスは環境に合わせて書き換えて下さい。

▼jQueryオブジェクトの、numInput()メソッドを実行します。オプションを設定する場合は、メソッドの第1引数にオブジェクトリテラルを渡します。オプションについては後述。これで、<input>要素が数値入力用として機能するようになります。

HTML | JavaScript

<input id="nt_1">
<input id="nt_2">
$(function(){
	$('#nt_1').numInput();
	$('#nt_2').numInput({min:10, max:50, allowEmpty:true});
});

▼JavaScriptで現在の値を取得するにはnumInput()メソッドの第1引数に文字列'get'を指定します。戻り値は、整数型で返されます。現在値が空文字の場合はnullが返されます。

JavaScript

let value = $(セレクタ).numInput('get');

▼JavaScriptで値を設定するにはnumInput()メソッドの第1引数に文字列で'set'を、第2引数に値を指定します。値には、数値、文字列、nullが指定可能です。数値として変換できない文字を指定した場合は、デフォルト値、もしくは空文字が設定されます。

JavaScript

// OK
$(セレクタ).numInput('set', 6);
$(セレクタ).numInput('set', '-10');
$(セレクタ).numInput('set', '20');
$(セレクタ).numInput('set', null);
// NG
$(セレクタ).numInput('set', 'abc');

オプション

設定可能なオプション項目です。数値範囲の制限やイベントの設定が可能です。

プロパティ初期値説明
widthint|nullnullボタンを含めた全体の幅
heightint|nullnull高さ
minint0最小値
maxint100最大値
defaultint0空文字を許可しないときに設定されるデフォルト値
valueint|nullnull現在値
stepint1増減ボタン、上下矢印キー、マウスホイールによる変化値
allowEmptyboolfalse空文字を許可するか
valueChangedfunctionnull値が変化したときのコールバック関数 イベント変数を持ち、valueプロパティから現在値を取得可能

サンプル / デモ

▼初期値5で、-10から10の範囲で指定可能な入力欄

HTML | JavaScript

<input id="sample_1">
$('#sample_1').numInput({min:-10, max:10, value:5});

▼空を許可し、5ずつ変化する入力欄

HTML | JavaScript

<input id="sample_2">
$('#sample_2').numInput({allowEmpty:true, step:5});

▼数値が変化したときに任意の関数を実行する入力欄

HTML | JavaScript

<input id="sample_3">
$('#sample_3').numInput({valueChanged:function(e){ console.log('value changed to ' + e.value); }});

F12キーを押してコンソールを開いて確認して下さい。