理解を深めるために、http://knockoutjs.com/documentation/extenders.html にアクセスして、Live Example 1: Forcing input to be numeric をご覧ください。
で小数値を入力できます。(ドット) ですが、コンマではありません。その後、金額は0にジャンプします。
ドットとコンマを許可する方法はありますか? 20.00 や 20,00 などの入力を許可したい
敬具、
K.
理解を深めるために、http://knockoutjs.com/documentation/extenders.html にアクセスして、Live Example 1: Forcing input to be numeric をご覧ください。
で小数値を入力できます。(ドット) ですが、コンマではありません。その後、金額は0にジャンプします。
ドットとコンマを許可する方法はありますか? 20.00 や 20,00 などの入力を許可したい
敬具、
K.
コンマを含む数値フィールドを受け入れるだけでなく、小数点としてコンマを使用して VM から数値を出力することもできます。read
したがって、基礎となる計算されたオブザーバブルのゲッター関数も実装する必要があります。またwrite
、丸めを気にしない場合は、機能を簡素化できます。完全なコードは次のとおりです。
ko.extenders.numeric = function(target) {
var result = ko.computed({
read: function() {
var value = target();
return isNaN(value) || value===null || value===''
? value
: value.toString().replace('.',',');
}
,write: function(newValue) {
if (typeof newValue === "string") {
newValue = newValue.replace(",", ".");
}
if (newValue !== target()) {
target(newValue);
}
}
});
result(target());
return result;
};
これを解決するために、数値エクステンダー (投稿したエクステンダーのドキュメント ページを参照) に小さな修正を実装することができます。エクステンダーの「書き込み」メソッドで、次のコードを一番上に追加します。
if (typeof newValue == "string") {
newValue = newValue.replace(",", ".");
}
モデルの初期化でエラーが発生しないようにするには、if ステートメントが必要です。モデルが最初に作成されたとき、値は文字列ではなく数値に設定されている可能性が高いため、このオブジェクトで .replace メソッドを呼び出すことはできません。