1

startdate と enddate の 2 つの入力ボックスがあります。ユーザーに、最初の入力ボックスの日付より後の日付を 2 番目の入力ボックスで選択させようとしています。これは ajax 保存時に検証されます。

isvalid を含むすべてが ie ではうまく機能しますが、FF やオペラでは機能しません。FF とオペラでは、開始日の前後の日付に関係なく、isValid:「開始日より後にする必要があります」というメッセージが表示され続け、検証されません。

理由、または日付ピッカーを使用して2番目の日付ピッカーのminDateを変更する解決策を知っている人はいますか?

ajaxモーダルのボタンは次のとおりです。

buttons: {
          'Save': function() {
                if($("#new_request_form").valid()){
                // do stuff if form validates
                submitFormWithAjax($("#new_request_form"));    
                $(this).dialog('close');
                } else {
                    // do stuff if form does not validate
                }

                },
          'Cancel': function() {$(this).dialog('close');}
        },

終了日が開始日より後であることを確認するための日付チェックは次のとおりです。

    jQuery.validator.addMethod("isValid", function (value, element) {
        var startDate = $('#startdate').val();
        var finDate = $('#enddate').val();
        return Date.parse(startDate) < Date.parse(finDate);
    }, "* End date must be after start date");  

    $("#new_request_form").validate({
         rules: {
            days: "required",
            hours: {
                    required: true,
                    number: true,
                    digits: false  
            },         
            startdate: "required",
            enddate: {
                    required: true,
                    isValid: true
            }         
        },
        messages:{
            days: "Required",
            hours: {
                    required: "Required",
                    number: "Numbers Only"
            },   
            startdate: "Required",
            enddate: {
                    required: "Required",
                    isValid: "Must be after start date"
            }  
        }
    });


    var $ac_start_date = '<?php echo $ac_end_date ?>',
        $ac_start_date_flip = '<?php echo $ac_end_date_flip ?>',
        $ac_start_parsed = Date.parse($ac_start_date),
        _today = new Date().getTime();

    // For Opera and older winXP IE n such
    if (isNaN($ac_start_parsed)) { 
        $ac_start_parsed  = Date.parse($ac_start_date_flip);
    }

    var _aDayinMS = 1000 * 60 * 60 * 24; 

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs($ac_start_parsed - _today);

    // Convert back to days and return
    var DAY_DIFFERENCE = Math.round(difference_ms/_aDayinMS);       

    // do initialization here
    $("#startdate").datepicker({
                dateFormat: 'dd-mm-yy',
                changeMonth: true,
                changeYear: true,
                yearRange: '0:+100',
                minDate: '+1d',         
                maxDate: '+' + (DAY_DIFFERENCE + 1) + 'd'
    });

    // do initialization here
    $("#enddate").datepicker({
                dateFormat: 'dd-mm-yy',
                changeMonth: true,
                changeYear: true,
                yearRange: '0:+100',
                minDate: '+1d',         
                maxDate: '+' + (DAY_DIFFERENCE + 1) + 'd'
    });

    }, 'html');
    return false;
    });
    }

function submitFormWithAjax(form) {
  form = $(form);
  $.ajax({
    url: form.attr('action'),
    data: form.serialize(),
    type: (form.attr('method')),
    dataType: 'script',
    success: function(data){
   }
  });
  return false;
}
4

0 に答える 0