[解決済み】HTMLのテキスト入力で数値入力しかできない。
2022-03-23 06:17:42
質問
HTMLのテキスト入力(
<input type=text />
を使用すると、数字キーストローク(+「.」)のみが許可されます。)
解決方法は?
<上 注意 これは更新された回答です。以下のコメントは、キーコードをいじくりまわしていた古いバージョンに言及しています。
JavaScript
自分でやってみる on JSFiddle .
テキストの入力値をフィルタリングすることができます
<input>
を次のように指定します。
setInputFilter
機能(Copy+Paste、Drag+Drop、キーボードショートカット、コンテキストメニュー操作、入力不可能なキー、キャレット位置、さまざまなキーボードレイアウト、そして
IE9以降の全ブラウザ
):
// Restricts input for the given textbox to the given inputFilter function.
function setInputFilter(textbox, inputFilter) {
["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
textbox.addEventListener(event, function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
});
}
これで
setInputFilter
関数を使って、入力フィルタをインストールすることができます。
setInputFilter(document.getElementById("myTextBox"), function(value) {
return /^\d*\.?\d*$/.test(value); // Allow digits and '.' only, using a RegExp
});
をご覧ください。 JSFiddleのデモ は、入力フィルタの例です。また、まだ は、サーバーサイドのバリデーションを行う必要があります。
タイプスクリプト
これをTypeScript化したものがこちらです。
function setInputFilter(textbox: Element, inputFilter: (value: string) => boolean): void {
["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
textbox.addEventListener(event, function(this: (HTMLInputElement | HTMLTextAreaElement) & {oldValue: string; oldSelectionStart: number | null, oldSelectionEnd: number | null}) {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (Object.prototype.hasOwnProperty.call(this, 'oldValue')) {
this.value = this.oldValue;
if (this.oldSelectionStart !== null &&
this.oldSelectionEnd !== null) {
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
}
} else {
this.value = "";
}
});
});
}
jQuery
これのjQuery版もあります。参照 この答え .
HTML 5
HTML5では、ネイティブソリューションとして
<input type="number">
(を参照してください)。
仕様
ただし、ブラウザの対応状況はさまざまです。
- ほとんどのブラウザは、フォームを送信するときにのみ入力の検証を行い、入力中には検証を行いません。
-
ほとんどのモバイルブラウザ
をサポートしていません。
step
,min
とmax
属性があります。 -
Chrome (バージョン71.0.3578.98) では、現在でも、文字
e
とE
をフィールドに挿入します。また この質問 . - Firefox(バージョン64.0)およびEdge(EdgeHTMLバージョン17.17134)では、現在も、ユーザーが 任意の のテキストをフィールドに入力します。
自分でやってみる w3schools.comで .
関連
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】divの高さを画面の残りスペースで埋めるようにする
-
[解決済み] HTMLのinputboxでjQueryを使って数字(0-9)だけを許可する方法は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] ページを再読み込みせずにURLを変更するにはどうすればよいですか?
-
[解決済み] HTML 5: Is it <br>, <br/>, or <br />?
-
[解決済み] Sublime Text 2を使ってHTMLコードを再フォーマットするにはどうしたらいいですか?
-
[解決済み】なぜHTMLは "chucknorris "を色と見なすのか?
-
[解決済み】HTML5入力のプレースホルダの色をCSSで変更する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み] テスト
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み】 \u003C とは何ですか?