2011-10-17 8 views

答えて

11

私はこのことについて少し遊んでいて、仕様を見てきました。それは有効な浮動小数点数でなければならないと言います。数の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に強制的に変更されるので、それが必要かどうかによって異なります。

+0

小数点を訂正し、テキストと数値フィールドを切り替えることで解決する方法は非常に賢明です。ありがとう! – Akshat

+3

嬉しいです。これはIMOのHTML5仕様の欠点ですので、将来的に誰かがこれを認識して修正することを願っています。 –

+0

良い解決策。指定した入力にのみ影響を与えるように少し拡張し、入力ボタンを押しても「変更」イベントを使用して末尾のゼロを保持しました。それがプレーンな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

9

私はあなたがそれだけの数の文字列にそれをレンダリングし、floatにキャストし、値をとり、0の

$('.number-input').on('change', function(){ 
    $(this).val(parseFloat($(this).val()).toFixed(2)); 
}); 

末尾きたい入力にイベント(「変更」)に添付小数点以下の桁数を値として返します。

+0

すでにjQueryを使用している人のためのすばらしい簡潔な解決策 – Mikey

+3

これは、存在すべきではない問題に対する素晴らしい解決策です。 –

+5

はChromeで動作しますが、Firefoxでは動作しないようです – WebChemist

関連する問題