2

JQuery Validate とカスタム メソッドに奇妙なバグがあります。何らかの理由で、フィールドが変更されるたびに検証メソッドが 3 ~ 4 回起動します。何らかの理由でループしていますが、その理由はわかりません。バリデーターが動作します。唯一の問題は、datepicker で動作しないことです。入力の値を変更するには、日付ピッカーを 2 回クリックする必要があります。jquery validate が datepicker の入力などをハイジャックしているようです。私はこの時点で無知であり、どんなアイデアでも楽しませてくれます。

カスタムメソッド:

$(document).ready(function () {

    $.validator.addMethod("laterDate", function(value, element) {   
       var id = "#" + element.id;
       var id_number = element.value.charAt(element.length - 1);
            alert(id_number);
       if(id_number == "1"){
            alert("in if")
            var id_value = $(id).fieldDate();
            var today = new Date();
                alert(id_value > today);
                return id_value > today;
      }
        else{
        alert("in else")
        var prev_id_number = String(parseInt(id_number) - 1);
        var prev_id = "#end_date_" + prev_id_number;
        var prev_id_value = $(prev_id).fieldDate();
        var id_value = $(id).fieldDate();
        return id_value > prev_id_value;
      }

    }, $.format("Enter a later date"));
});

バリデータ コードは次のとおりです。

$(document).ready(function () {
    $("#rate_new_new").validate({
        debug: true,

rules: {
                "rates[start_date_1]": {dateITA: true, maxlength: 50},
                "rates[end_date_1]": {dateITA: true, maxlength: 50, laterDate: true},
                "rates[price_1]": {testPrice: true}
                },
    messages: {

        "rates[start_date_1]": {
            dateITA: "Please enter a valid date",
            maxlength: "The name must be less than 50 characters"

        }
    },      

    submitHandler: function(form) {

                $(form).ajaxSubmit({

                        success: function(){
                          $('#lefttabs li:eq(4) a').tab('show');
                                            }
                                  });


                                  }
 });
 });
4

2 に答える 2

3

JqueryUIDatePicker を使用していますか?

よりも、これを試してください:

$('#yourid').datepicker({
    onSelect: function(dateText, inst) {
        $(this).blur();
    }
});
于 2012-10-15T07:34:19.520 に答える
0

あなたのコードには、行末やStringステートメントの欠落などのいくつかのエラーがありました/あります(私はあなたが意味したと思います.toString())、以下はあなたの修正されたコードです:

$(document).ready(function() {

    $.validator.addMethod("laterDate", function(value, element) {
        var id = "#" + element.id;
        var id_number = element.value.charAt(element.length - 1);
        alert(id_number);
        if (id_number == "1") {
            alert("in if");
            var id_value = $(id).fieldDate();
            var today = new Date();
            alert(id_value > today);
            return id_value > today;
        }
        else {
            alert("in else");
            var prev_id_number = (parseInt(id_number) - 1).toString();
            var prev_id = "#end_date_" + prev_id_number;
            var prev_id_value = $(prev_id).fieldDate();
            var id_value = $(id).fieldDate();
            return id_value > prev_id_value;
        }

    }, $.format("Enter a later date"));
});​
于 2012-10-15T03:04:09.483 に答える