1

ノックアウトjsとノックアウトバリデーションを使用するシンプルなフォームがあります。互換性モードで IE を実行すると、次のように動作します。

フィールドは必須です。:

self.oldPassword = ko.observable().extend({ required: true});

ページをロードすると、デバッグ モードで次のメッセージが表示されます: Field is required

しかし、入力を開始すると、エラーが次のように変わります。 true 以上の値を入力してください。

少なくとも IE8 もサポートしたいので、ここで迷っています。IE10、Chrome、または FireFox ではこの問題は発生しません。そして、すべての JavaScript ファイルをノックアウト モデルと検証で書き換えたくありません。

この問題は聞き覚えがありますか? そして、解決策はありますか?

4

2 に答える 2

1

ノックアウト検証は、オブザーバブルがバインドされている要素に html-5 検証属性が指定されているかどうかをチェックし、同等の検証ルールを追加します。これは、チェックする html-5 検証属性のリストです。

var html5Attributes = ['required', 'pattern', 'min', 'max', 'step'];

それらのそれぞれに対して hasAttribute 関数を呼び出します。

hasAttribute: function (node, attr) {
    return node.getAttribute(attr) !== null;
}

IE7/IE8 互換モードでは、属性が見つからない場合、node.getAttribute(attr) は空の文字列を返すため、この式 "node.getAttribute(attr) !== null" は常に true です。

したがって、互換モードのオブザーバブルには、5 つの追加の検証ルールがあります。幸いなことに、これはすべて実際の IE7/IE8 には関係ありません。

于 2013-07-16T11:10:50.140 に答える