0

Opera ブラウザーで使用する予定の (localhost) Web サイトを作成しています (私のサイトは HTML5 を使用しているため)。サイトの一部にフォームがあり、フィールドの 1 つが数値です。jQuery Validate プラグインを使用してエントリが数値であることを検証しようとしていますが、必須ではありません。

これが解決策になると思います.Chromeでは機能しますが、Operaでは検証が無視されます

<form id="productForm">
<input type="text" name="MinPrice" id="Minprice" />
<input type="submit" value="OK" />
</form>​

$("#productForm").validate({
     rules: {
         MinPrice: {
             number: true
         }
     }
 });​

jQuery が Opera で数値を検証するには、次のように書く必要があるようです。

<form id="productForm">
<input type="text" name="MinPrice" id="Minprice" />
<input type="submit" value="OK" />
</form>​

$("#productForm").validate({
     rules: {
         MinPrice: {
             number: true,
             required: true
         }
     }
 });​

しかし、問題は、MinPrice を要求したくないということです。フィールドに何かを入力した場合にのみ検証したいのです。

ありがとうございました、

キャンプスープ1988

4

2 に答える 2

0

ここで実際に起こることは、Opera では、入力された値が有効な数値でない場合、input.value (および Opera が送信するもの) が空の文字列になるということです。やや紛らわしいことに、ユーザーが入力した内容は無効としてフラグが立てられることなく入力に残され、.value が空であるため、JS 検証でも問題は見られません。

これは、仕様によると、「値のサニタイズアルゴリズムは次のとおりです。要素の値が有効な浮動小数点数でない場合は、代わりに空の文字列に設定してください」というテキストによると、一種の正しいものですが、UI に関してはそうです。まだ紛らわしいので、Opera で修正する必要があると思います。

于 2012-06-12T19:30:46.007 に答える
0

これは、プラグイン (または視点によっては Opera) のバグのようです。

次のように「依存関係コールバック」を使用して回避できる場合があります。

$("#productForm").validate({
    rules: {
        MinPrice: {
            required: function(el) {
                var $el = $(el);
                if(!$el.val()) { $el.val('0') };
                return false;
            },
            number: true
        }
    }
});​

正しければ、「0」を挿入してフィールドが空にならないようにする必要があります。

プラグインが番号の検証の前に「必要な」検証を実行すると、この回避策が機能する可能性があります。

それが機能しない場合は、フィールドにバインドされた「blur」ハンドラーを使用して同じ効果を実現できます。

ユーザーが入力した「0」と強制された「fudge-value」を区別する必要がある場合は、「0」の代わりに「-1」を強制し、それに応じてサーバー側をテストできます。

于 2012-06-09T05:48:27.593 に答える