私はフィールドを持っている:HTML5番号フィールドの末尾に0を表示させるにはどうすればよいですか?
私はそれが0.5
に「それを修正する」なし0.50
にパンチしたいと思いますので、それは0.50
を表示していました。
私はフィールドを持っている:HTML5番号フィールドの末尾に0を表示させるにはどうすればよいですか?
私はそれが0.5
に「それを修正する」なし0.50
にパンチしたいと思いますので、それは0.50
を表示していました。
私はこのことについて少し遊んでいて、仕様を見てきました。それは有効な浮動小数点数でなければならないと言います。数のn個の浮動小数点数が nにはJavaScript演算子ToStringメソッドを適用して得られた文字列 あるとして
最高の表現:私の注意を引いたことができますdefinition of a valid floating point numberで一つの文章があります。
これは、フォーマットは常に数字が何であるかを評価し、その数字にJavaScriptのtoStringを使用することと一貫していることを意味します。だから後続の0はない。
JavaScriptを使用する必要があります。 document.getElementById('numInput').value = '0.50';
はまだ0.5
に訂正されているため、妥当性検査はonchange
でトリガーされないため、デフォルトのアクションは防止され、内部的にトリガーされます。
これは、それがハッキングのビットだし、堅牢性のために微調整のビットを必要としますが、うまくいけば、それはあなたがやりたいよ...私が思い付くことができる最高のソリューションです:
var numInput = document.getElementById('numInput');
numInput.addEventListener('keypress', function() {
this.setAttribute('type', 'text');
});
numInput.addEventListener('click', function() {
this.setAttribute('type', 'number');
});
ユーザが入力して数字を入力したい場合は、入力タイプをテキストに切り替えますが、クリックすると番号に変換されます。
あなたは常に末尾の0は、どんなユーザーの種類、その後、あなたはそれをこのような何かできなかった場合:
var numInput = document.getElementById('numInput');
numInput.addEventListener('blur', function() {
if (this.value === '') {
return;
}
this.setAttribute('type', 'text');
if (this.value.indexOf('.') === -1) {
this.value = this.value + '.00';
}
while (this.value.indexOf('.') > this.value.length - 3) {
this.value = this.value + '0';
}
});
numInput.addEventListener('focus', function() {
this.setAttribute('type', 'number');
});
編集:私は第二の溶液は、どのようなユーザーとのより多くのインラインだと思うがユーザーが0.5
と入力すると、0.50
に強制的に変更されるので、それが必要かどうかによって異なります。
小数点を訂正し、テキストと数値フィールドを切り替えることで解決する方法は非常に賢明です。ありがとう! – Akshat
嬉しいです。これはIMOのHTML5仕様の欠点ですので、将来的に誰かがこれを認識して修正することを願っています。 –
良い解決策。指定した入力にのみ影響を与えるように少し拡張し、入力ボタンを押しても「変更」イベントを使用して末尾のゼロを保持しました。それがプレーンなJS 'onchange'でうまくいかなかった理由を知らないので、JQueryでやった。 Chromeでのみテスト済み: '$( 'input.float')。それぞれ(function(index){ \t $(this))変化(関数(イベント){ \t \t IF(this.value === ''){ \t \t \t戻り、 \t \t} \t \t IF(this.value.indexOf( '')=== -1){ \t \t \t this.value = this.value + '0.00 '; \t \t} \t \t一方(this.value.indexOf('。')> this.value.length - 3){ \t \t \t this.value = this.val ue + '0'; \t \t} \t}); }); ' – YOMorales
私はあなたがそれだけの数の文字列にそれをレンダリングし、floatにキャストし、値をとり、0の
$('.number-input').on('change', function(){
$(this).val(parseFloat($(this).val()).toFixed(2));
});
末尾きたい入力にイベント(「変更」)に添付小数点以下の桁数を値として返します。
すでにjQueryを使用している人のためのすばらしい簡潔な解決策 – Mikey
これは、存在すべきではない問題に対する素晴らしい解決策です。 –
はChromeで動作しますが、Firefoxでは動作しないようです – WebChemist
編集Paulに感謝します。タイトルははるかに簡潔です。 – Akshat