0

ここで受け入れられた回答によると、これは必要な選択を検証で機能させるために私がしなければならないことです。

jsfiddleでサンプルを作成しましたが、動作しません。

主な違いは、デフォルトが単純に空 ("") であることです。

<form id="myform">
    <select id="id_deals-0-currency" class="required" name="deals-0-currency">
    <option value="">---------</option>
    <option selected="selected" value="1">USD - $</option>
    <option value="2">EUR - €&lt;/option>
    </select>
</form>

$(function() {
    $(document).ready(function() {

        $.validator.addMethod("valueNotEquals", function(value, element, arg) {
            return arg != value;
        }, "Value must not equal arg.");


        $("#myform").validate({
            rules: {
                deals-0-currency: {
                    valueNotEquals: ""
                }
            },
            messages: {
                deals-0-currency: {
                    valueNotEquals: "Please select an item!"
                }
            }

        });
    });
})
4

2 に答える 2

2

あなたのコードは機能しますが deals-0-currency、オブジェクトキーとして引用する必要があり、空の文字列のデフォルトがrequired検証に必要なアイテムを作成するクラスによって切り捨てられています。空の値は常に最初に必要なメッセージをトリガーし、検証メソッドは現在のデフォルトのトリガーでは決してトリガーされません""

$("#myform").validate({           
    rules: {
        'deals-0-currency': {
            valueNotEquals: ""
        }
    },
    messages: {
        'deals-0-currency': {
            valueNotEquals: "Please select an item!"
        }
    }
});

DEMO (必要なクラスを削除したもの) http://jsfiddle.net/WGL4j/7/

編集:選択が変更されたときに選択を検証するにはvalidator valid()、フォーム全体または個々の要素のみで呼び出すことができるメソッドを使用します。

 $('#id_deals-0-currency').change(function(){
            $(this).valid()
})

更新されたデモ: http://jsfiddle.net/WGL4j/8/

于 2012-12-23T14:07:34.170 に答える
0

まず、有効な JavaScript を記述していません。名前にダッシュを含めることはできません。代わりに「_」に切り替えるか、名前を引用すると有効になります。JavaScript は、常にJSLintJSHintなどのツールを使用して実行することを忘れないでください。

コードのもう 1 つの奇妙な点は、$(function(){}) handler$(document).ready(function(){})ハンドラーが互いにネストされていることです。これによりコードが壊れることはありませんが、不要です。

選択値が変更されたときに検証をチェックするという点では、検証を手動で呼び出す必要があります。 JQuery Validation には、validこれを行うためのメソッドが付属しています。Ready 関数を更新して、この行を含めます。

$('id_deals-0-currency').on('change', function() { $('#myform"').valid(); });

さて、変更がすべて整ったので、最終的なコードは次のようになります (作業中の jsFiddle 全体はこちら)。

<html>
<head>
<script src="/path/to/jquery-1.8.3.min.js"></script>
<script src="/path/to/jquery.validate.js"></script>
<script>
$(function() {
    $.validator.addMethod("valueNotEquals", function(value, element, arg) {
        return arg != value;
    }, "Value must not equal arg.");


    $("#myform").validate({
        rules: {
            deals_0_currency: {
                valueNotEquals: ""
            }
        },
        messages: {
            deals_0_currency: {
                valueNotEquals: "Please select an item!"
            }
        }

    });

    $('#id_deals-0-currency').on('change', function() { $('#myform').valid(); });
});
</script>
<body>
<form id="myform" method="post">
        <select id="id_deals-0-currency" class="required" name="deals_0_currency">
        <option value="">---------</option>
        <option selected="selected" value="1">USD - $</option>
        <option value="2">EUR - €&lt;/option>
        </select>
</form>​
</body>
</html>
于 2012-12-23T14:06:24.847 に答える