2

理解を深めるために、http://knockoutjs.com/documentation/extenders.html にアクセスし、Live Example 1: Forcing input to be numeric をご覧ください。

で小数値を入力できます。(ドット) ですが、コンマではありません。その後、金額は0にジャンプします。

ドットとコンマを許可する方法はありますか? 20.00 や 20,00 などの入力を許可したい

敬具、

K.

4

2 に答える 2

1

コンマを含む数値フィールドを受け入れるだけでなく、小数点としてコンマを使用して 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;
};  
于 2013-09-26T12:24:41.427 に答える
0

これを解決するために、数値エクステンダー (投稿したエクステンダーのドキュメント ページを参照) に小さな修正を実装することができます。エクステンダーの「書き込み」メソッドで、次のコードを一番上に追加します。

        if (typeof newValue == "string") {
            newValue = newValue.replace(",", ".");
        }

モデルの初期化でエラーが発生しないようにするには、if ステートメントが必要です。モデルが最初に作成されたとき、値は文字列ではなく数値に設定されている可能性が高いため、このオブジェクトで .replace メソッドを呼び出すことはできません。

于 2012-11-16T13:25:19.767 に答える