<input type="number">
フィールドの "real"値を取得するにはどうすればよいですか?
input
ボックスがあり、新しいHTML5入力タイプnumber
を使用しています。
<input id="edQuantity" type="number">
これはほとんどChrome 29でサポートされています:
今必要なのは、ユーザーが入力ボックスに入力した "raw"値を読み取る機能です。ユーザーが番号を入力した場合:
edQuantity.value = 4
、そしてすべてが順調です。
しかし、ユーザーが無効なテキストを入力した場合、入力ボックスを赤色にしたい:
残念ながら、type="number"
入力ボックスの場合、テキストボックスの値が数値でない場合、value
は空の文字列を返します。
edQuantity.value = "" (String);
(少なくともChrome 29で)
<input type="number">
コントロールの "raw"値を取得するにはどうすればよいですか?
入力ボックスの他のプロパティのChromeのリストを見てみました:
実際の入力に似たものは見ませんでした。
また、ボックス「空」かどうかを判断する方法を見つけることもできません。たぶん私は推測できたかもしれません:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
注:横罫線の後はすべて無視できます。質問を正当化するための単なるフィラーです。また、例と質問を混同しないでください。人々は、この質問に対する答えを、ボックスを赤くする以外の理由otherで望むかもしれません(1つの例:テキスト"four"
をラテン"4"
記号に変換するonBlurイベント)
<input type="number">
コントロールの "raw"値を取得するにはどうすればよいですか?
WHATWG によると、有効な数値入力でない限り、値を取得できないはずです。入力数値フィールドのサニタイズアルゴリズムでは、入力が有効な浮動小数点数でない場合、ブラウザーは値を空の文字列に設定することになっています。
値のサニタイズアルゴリズム は次のとおりです。要素の 値 が 有効な浮動小数点数 でない場合は、空に設定します代わりに文字列。
タイプ(<input type="number">
)を指定することにより、ブラウザーに何らかの作業を行うように求めています。一方、非数値入力をキャプチャしてそれを使用したい場合は、古い試行された真のテキスト入力フィールドに依存し、コンテンツを自分で解析する必要があります。
W も同じ仕様を持ち、追加されます:
ユーザーエージェントは、ユーザーが有効な浮動小数点数ではない空でない文字列に値を設定することを許可してはなりません。
それは質問に答えませんが、有用な回避策はチェックすることです
edQuantity.validity.valid
オブジェクトの ValidityState
は、ユーザーが入力した内容に関する手がかりを与えます。 min
とmax
が設定されたtype="number"
入力を考えます
<input type="number" min="1" max="10">
私たちはalways.validity.valid
を使用したいです。
他のプロパティはボーナス情報のみを提供します:
User's Input .value .valid | .badInput .rangeUnderflow .rangeOverflow
============ ====== ====== | ========= =============== ==============
"" "" true | false false false ;valid because field not marked required
"1" "1" true | false false false
"10" "10" true | false false false
"0" "0" false | false true false ;invalid because below min
"11" "11" false | false false true ;invalid because above max
"q" "" false | true false false ;invalid because not number
"³" "" false | true false false ;superscript digit 3
"٣" "" false | true false false ;arabic digit 3
"₃" "" false | true false false ;subscript digit 3
使用する前に、ブラウザーがHTML5検証をサポートしていることを確認する必要があります。
function ValidateElementAsNumber(element)
{
//Public Domain: no attribution required.
if ((element.validity) && (!element.validity.valid))
{
//if html5 validation says it's bad: it's bad
return false;
}
//Fallback to browsers that don't yet support html5 input validation
//Or we maybe want to perform additional validations
var value = StrToInt(element.value);
if (value != null)
return true;
else
return false;
}
Spudlyは彼が削除した有用な答えを持っています:
これにはCSS
:invalid
セレクターを使用してください。input[type=number]:invalid { background-color: #FFCCCC; }
これにより、数値以外の有効な値が入力されるたびに要素が赤に変わります。
<input type='number'>
のブラウザサポートは:invalid
とほぼ同じなので、問題ありません。
input.focus();
document.execCommand("SelectAll");
var displayValue = window.getSelection().toString();
キーコードに基づいて押されたすべてのキーを追跡します
キーアップイベントをリッスンし、キーコードに基づいて入力されたすべての文字の配列を保持できると思います。しかし、それはかなり退屈な作業であり、おそらくバグが発生しやすいでしょう。
http://unixpapa.com/js/key.html
入力を選択し、選択範囲を文字列として取得します
document.querySelector('input').addEventListener('input', onInput);
function onInput(){
this.select();
console.log( window.getSelection().toString() )
}
<input type='number'>
すべてのクレジット:int32_t