Дата изменения Datepicker срабатывает дважды

Я сталкиваюсь с этой проблемой, когда изменение даты срабатывает дважды, пользователь выбирает дату, и дата будет в формате»dd-mm-yyyy«, но когда пользователь нажимает на поле даты или изменяет дату, она изменится на «YYYY-MM-DD» (мне нужно, чтобы она была в этом формате при отправке)

Я не уверен, что делаю что-то не так.

соответствующий код:

<input type="text" data-bind="value: DateOfBirth" value="" required="" name="DateOfBirth" id="DateOfBirth" placeholder="dd/mm/yyyy" data-val-required="Date of Birth is required." data-val="true" autocomplete="off"class="form-control input-sm datepicker" aria-required="true" onkeydown="return false"  />

<script>
        $('.datepicker').datepicker({
            startView: "decade",
            minViewMode: "days",
            format: "dd/mm/yyyy",
            autoclose: true,
            endDate : '0'
        });

    $('#DateOfBirth').change(function ()
    {
        var date = $(this).val();
        if (date != null && date != "")
        {
            var dateArray = date.split('/');
            if (dateArray.length === 3)
            {
                myModel.DateOfBirth(dateArray[2] + "-" + dateArray[1] + "-" + dateArray[0]);
            }
        }
        $(this).valid();  
    }); 

</script>

2 ответа

  1. myModel нигде не определяется.

    Вы могли бы сделать это так:

        $('#DateOfBirth').change(function() {
          var date = $(this).val();
          if (date != null && date != "") {
            var dateArray = date.split('/');
            if (dateArray.length === 3) {
              $('#DateOfBirth').val(dateArray[2] + "-" + dateArray[1] + "-" + dateArray[0]);
            }
          }
          $(this).valid();
        });
    

    Но снова вы увидите только YYYY-MM-DDформат во входных данных. Потому что он обновляется при изменении, и он меняется всякий раз, когда вы выбираете дату, поэтому начальный формат всегда перезаписывается.

    Вы можете проверить его здесь https://jsfiddle.net/vo7k676n/

    Вы можете сделать это изменение формата на сервере или в форме отправить вместо изменения ввода.

  2. Мне удалось исправить это с помощью jQuery-ui,

    <input type="text" data-bind="value: DateOfBirth" value="" required="" name="DateOfBirth" id="DateOfBirth" placeholder="dd/mm/yyyy" data-val-required="Date of Birth is required." data-val="true" autocomplete="off"class="form-control input-sm datepicker" aria-required="true" onkeydown="return false"  />
    
    <input type="hidden" id="BirthDate" value="" data-bind="value: DateOfBirth" />
    
    <script>
            $(function () {
    
                $('#DateOfBirth').datepicker({
                    format: 'dd/mm/yyyy',
                    altField: "#BirthDate",
                    altFormat: "yy-mm-dd"
                });
    
            $('#DateOfBirth').change(function () {
                var date = $("#BirthDate").val();
                if (date != null && date != "") {
                    myModel.DateOfBirth(date);
                }
            });
    
    </script>