Wątek przeniesiony 2020-07-28 11:50 z C# i .NET przez Ktos.

jQuery DatePicker - nieprawidłowa walidacja w przeglądarce Firefox

0

Witam. Walidacja w przeglądarce Chrome przebiega bez zarzutów, jednak w Firefox otrzymuję błąd walidacji (nieprawidłowa wartość).
Format daty w DatePicker: dateFormat: 'dd.mm.yy',

Surfując po google wyczytałem, że muszę edytować skrypt walidacji daty w jquery. Udało mi się znaleźć skrypt walidacji. Nawet w komentarzu jest napisane, że mój format daty zwróci false. Tylko dlaczego działa to w chrome, a w firefox nie?

$.validator.addMethod( "dateFA", function( value, element ) {
	return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );
}, $.validator.messages.date);

/**
 * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
 *
 * @example $.validator.methods.date("01/01/1900")
 * @result true
 *
 * @example $.validator.methods.date("01/13/1990")
 * @result false
 *
 * @example $.validator.methods.date("01.01.1900")
 * @result false
 *
 * @example <input name="pippo" class="{dateITA:true}" />
 * @desc Declares an optional input element whose value must be a valid date.
 *
 * @name $.validator.methods.dateITA
 * @type Boolean
 * @cat Plugins/Validate/Methods
 */
1

A input masz typu "date"? Bo o ile pamiętam to FF zwraca inaczej datę niż Chrome z takiego pola. Ale może źle zrozumiałem problem, jeśli tak to przepraszam.

0
<script type="text/javascript">
        $(function () {
            var array = @Html.Raw(Json.Serialize(Model.DisabledDates));
            var today = new Date();

            $("#datepicker").datepicker({
                minDate: today,
                beforeShowDay: function (date) {
                    var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
                    return [array.indexOf(string) == -1]
                },
            })

        });
        $.datepicker.regional['pl-PL'] = {
            closeText: 'Zamknij',
            prevText: '&#x3C;Poprzedni',
            nextText: 'Następny&#x3E;',
            currentText: 'Dziś',
            monthNames: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
                'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],
            monthNamesShort: ['Sty', 'Lu', 'Mar', 'Kw', 'Maj', 'Cze',
                'Lip', 'Sie', 'Wrz', 'Pa', 'Lis', 'Gru'],
            dayNames: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'],
            dayNamesShort: ['Nie', 'Pn', 'Wt', 'Śr', 'Czw', 'Pt', 'So'],
            dayNamesMin: ['N', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So'],
            weekHeader: 'Tydz',
            dateFormat: 'yy.mm.dd',
            firstDay: 1,
            isRTL: false,
            showMonthAfterYear: false,
            yearSuffix: ''
        };
        $.datepicker.setDefaults($.datepicker.regional['pl-PL']);
        
    </script>
<input asp-for="Input.ReservationDate" type="text" class="form-control" id="datepicker" placeholder="rrrr.mm.dd" onchange="this.form.submit()" autocomplete="off" />
[Required(ErrorMessage ="Wymagane - Data rezerwacji")]
[Display(Name ="Data rezerwacji")]
[DataType(DataType.Date, ErrorMessage ="Data jest nieprawidłowa")]
public DateTime? ReservationDate { get; set; }

Ogólnie walidacja działa mi dobrze na każdej przeglądarce, kiedy dateFormat: 'yy.mm.dd'. Problem z Firefox następuje przy dateFormat: 'dd.mm.yy'.

1 użytkowników online, w tym zalogowanych: 0, gości: 1