。 「生の」JSフォームとExtJsフォームの両方を使って作業することで、フィールドをフォーカスして操作する方法が複数あることがわかりました。これは、適時に内部価値を操作することを困難にします。
問題を複数の問題に分割できます。これは私が取り組むしようとします。
は、あなたがあなたのロジックが何かがフィールドに起こるすべての回で実行したい
をトリガ。 次のリンクは、オプションを提供します: http://www.w3schools.com/TAGS/ref_eventattributes.asp
誰かがあなたがフィールドをぼかす後の値を変更したときにトリガーすることONCHANGE使用(あなたがクリックするか、離れてフィールドからタブを)。だからそれは良いことではありません。
キー(上、下、プレス)イベントを試すことができます。ただし、値を貼り付けるときは除外されます。
簡単に言えば、理論的には、ユーザーの入力を確実に把握し、必要な操作を行うために考えられるすべてのイベントに関数を実装しようとすることができます。
私の解決策は、フィールドをフォーカスして値を検証し、さらにロジックを行うときにタイマーを開始することです。そして、あなたがぼかしをしたいと思ったものをすべて完成させてください。値
あなたは、いくつかの気の利いた正規表現または値が正しいかどうかを示します一行文を書くことができるの正しさを決定
。最後はすべて同じです。あなたのニーズに合っているはずです。
だから、のようなもの:
var inputVar = element.value;
var inputFloat = parseFloat(inputVar);
var normalizeInput = Math.round(inputFloat * 100)/100;
if(inputFloat > 0 && normalizeInput == inputFloat){
#correct value
}else{
#incorrect value
}
正しい/間違った入力を処理
今、あなたは、ユーザーの入力を処理し、何かをしたいです。 フィールドを無効または読み取り専用に設定すると、それ以上の入力や変更はできませんが、ユーザーが自分のフィールドに何もしないようにすることができます。
私が読んだところでは、フィールドが機能的に変化しないようにしたいと思っています。あなたはそれを編集できるようにしたいと思っています。
だからそれは2つのオプションであなたを残します:目的の値でelement.valueをオーバーライドすることで、直接フィールドの内容を編集する
。
誤った入力を修正している間にユーザーが押した同じ位置にカーソルを置いて試してみます。
カーソルポジション(ブラウザに依存)が混乱する可能性がありますが、私はそれほど面倒ではありません。
最終的な実装
だから私は上記のすべての組み合わせを提案するもの:あなたがチェックし、その後、あなたは機能の実行でのsetTimeoutかのsetInterval http://www.w3schools.com/jsref/met_win_settimeout.asp http://www.w3schools.com/jsref/met_win_setinterval.asp
の実行を開始フォーカスで
を以前の値が設定されている場合
最初はそうではありません。 この前の値をどこかに保持する必要があります。javascript内の変数に保持するか、DOMのフィールドに入れることができます。この値は、それを保存する前に正しいかどう
var inputElement.setAttribute('old_value', oldValue);
http://www.w3schools.com/jsref/met_element_setattribute.aspは今、あなたは他のちょうど空白に戻ってそれをデフォルト(または、あなたがで文字を切り取る保つことができる検証し、何かに値を正常化しようとすると、確認してください例えば右)。
今度は、実行ごとに値が正しいかどうかを確認します。値が正しい場合は、新しい値を '新しい'以前の値として保持します(そのメソッドを使用する場合は、再度setTimeoutを呼び出します)。
正しくない場合は、古い値を書き戻すか、入力値を正規化しようとします。失敗した場合は、最後の正しい値を使用します。あなたがのsetTimeoutかのsetIntervalがバックグラウンドで実行されているクリアblurイベントで
: http://www.w3schools.com/jsref/met_win_cleartimeout.asp http://www.w3schools.com/jsref/met_win_clearinterval.asp
document.activeElementは、この「ループ上で実行されるものと同じである場合(またはあなたがチェックできます'それはいつ止めるべきかを知っている)。
ブラーでは、値を前回チェックして、誤入力を防ぐために同じロジックを実行します。
HTML 5 input type="number" element for floating point numbers on Chrome
Try <input type="number" step="0.01" /> if you are targeting 2 decimal
places :-).
edited Apr 27 '15 at 18:10
Andre Figueiredo
のみをサポートするブラウザ上で動作します:
PLAN Bの
はHTML5番号入力フィールドを使用します。
'reactjs'は、あなたがチェックをすることができる' keydown'イベントにバインドする方法を持っていると仮定し、新しいエントリを防ぐために小数点以下2桁があることを検出すると 'return false'を検出しますか? – Nope