次に、他のキーボード イベントを使用してみてください。たとえば、私はちょうど追加しました
$("input").on('keyup', function() {
alert('keyup' + $(this).val());
})
JSFiddle の例に、テキストボックス内でalert
押すと が表示されます。a
number
注: チェック$(this).val()
しても無効な文字は返されません (少なくとも Chrome では)。結果を返す前に無効な値を削除します (たとえば、1a
空白になります)。これはchange
、入力がすべて無効であるため、値が実際に変更されていないときにイベントが発生していないように見える理由でもあります。無効な文字をキャッチするには、代わりにイベントのkeyCode
:
$("input").on('keyup', function(e) {
if (e.keyCode < 48 || e.keyCode > 57) {
// not 0-9 (note: ignores -)
alert('error!');
}
});
もう少しいじった後、Chrome と IE10 の動作は似ていることに気付きましたが、IE10 にはストリッピングにバグがあるようです。
数値以外で入力を開始するnumber
と、IE10 (おそらく 9 も) は、その後に続く文字に関係なく、残りの入力を有効な数値と見なします (たとえば、IE の目1a2
と同じように有効です)。 12
. ただし、Chrome では、数字以外を入力すると、すぐに入力が無視され、無効であると宣言されます。IE10 では、数値以外で開始した場合の動作は同じです。
動作の大きな違いの 1 つは、IE10 が の後blur
に無効な数値フィールドをクリアすることですが、ここでも、フィールドが数値以外で始まる場合にのみ無効と見なします (例: a1
)。 -
は数字の前に置くことができますが、複数の数字は使用できません。
どちらのブラウザでも、number
が無効であると見なされた場合、 this.value
(結果的$(this).val()
に ) は空白を返します。number
IE10 では、が数字 ( ) で始まる場合、生の無効な値を取得できます0-9
。両方のブラウザーは、入力が実際に変更されたと見なされた場合にのみchange
イベントを発生させます。つまり、IE10 の場合、ユーザーが入力してから入力abcd
をblur
s すると、IE10 はフィールドをクリアし、有効な値があればchange
イベントを発生させます。変更前の値です。Chrome では、入力が有効かどうかに関係なく変更が発生します。無効な場合は、空白の値に変更されます。
つまり、有効な数値入力と無効な数値入力を処理できますが、ユーザーがテキスト ボックスに入力した実際の値を確実に取得することはできません。
HTML
put letters in me and press tab:
<br />
<input type="number"/>
<br />
<p id="event" />
<p id="text" />
JavaScript
function checkValid(e) {
var $this = $(this);
$("#event").text(e.type);
$("#text").html("this.value: " +
this.value +
"<br />$(this).val(): " +
$this.val() + "<br />$(this).is(:valid): " +
$this.is(":valid") +
"<br />$.isNumeric(this.value): " +
$.isNumeric(this.value)); // <- helps check
}
$('input[type="number"]').on('change', checkValid).on("keyup", checkValid);
をチェックすることで、有効な番号かどうかを確認できます$.isNumeric
。および疑似クラスは、フィールドが としてマークされている場合を除き、IE10 では機能しません:valid
( IE9ではまったく機能しません) 。:invalid
number
required
required