jQuery как разделить сегодняшнюю дату из входных данных на месяц, день, год, когда datepicker НЕ используется

#jquery #datepicker

#jquery #datepicker

Вопрос:

У меня есть входные данные datepicker, которые заполняются сегодняшней датой при загрузке страницы. При использовании datepicker дата разбивается на месяц, день и год и помещается в три скрытых поля, которые отправляются на сервер с данными post. Проблема возникает, когда пользователь решает, что сегодняшняя дата подходит, и не использует datepicker; как мне поместить фрагменты даты в эти три скрытых поля?

Я пытался разбить сегодняшнюю дату на части и добавить ее в эти поля, но все способы, которыми я пытался добавить ее в jQuery или используя обычный JavaScript, ломают все это. Вот рабочий код, на котором я хотел бы основываться:

jQuery

 $(function() {
    //set your date picker
        $("#CI").datepicker({
        dateFormat: 'mm/dd/yy',
        changeMonth: true,
        changeYear: true,
        showOn: "both",
        buttonImage: "css/images/calendar-green.gif",
        buttonImageOnly: true,
        buttonImageText: "Calendar",
        beforeShow: function(dateText, instance) { 
            $("#CI").datepicker('setDate', new Date());
        },
        onSelect: function(dateText, instance) {
            var pieces = dateText.split("/");
             $("#CID").val(pieces[0]);
             $("#CIM").val(pieces[1]);
             $("#CIY").val(pieces[2]);
         }                
    })

    //get the current date
    var todaysDate = new Date();
    //format the date in the right format (add 1 to month because JavaScript counts from 0)
    formatDate = (todaysDate.getMonth()   1)   '/'   
                         todaysDate.getDate()   '/'   
                         todaysDate.getFullYear();
    //set the input value
    $('#CI').val(formatDate);       
});
  

HTML

 <input type='text' id='CI' name="CI">
<input type="text" name="CID" id="CID" />
<input type="text" name="CIM" id="CIM" />
<input type="text" name="CIY" id="CIY" />
  

Ответ №1:

Разделите свою onSelect() функциональность на отдельную функцию, которую можно вызывать дважды.

Наличие одной и той же функции, выполняющей обе задачи, позволяет вам справляться с любыми изменениями в вашей функциональности или структуре HTML.

итак…

 $(function() {
    function populateHidden(dateText){
        var pieces = dateText.split("/");
        $("#CID").val(pieces[0]);
        $("#CIM").val(pieces[1]);
        $("#CIY").val(pieces[2]);
    }
    //set your date picker
    $("#CI").datepicker({
        dateFormat: 'mm/dd/yy',
        changeMonth: true,
        changeYear: true,
        showOn: "both",
        buttonImage: "css/images/calendar-green.gif",
        buttonImageOnly: true,
        buttonImageText: "Calendar",
        beforeShow: function(dateText, instance) { 
            $("#CI").datepicker('setDate', new Date());
        },
        onSelect: populateHidden
    })

    //get the current date
    var todaysDate = new Date();
    //format the date in the right format (add 1 to month because JavaScript counts from 0)
    formatDate = (todaysDate.getMonth()   1)   '/'   
                         todaysDate.getDate()   '/'   
                         todaysDate.getFullYear();
    //set the input value
    $('#CI').val(formatDate); 
    populateHidden(formatDate); 
});
  

Комментарии:

1. Работает отлично! Использование функции — отличная идея! Спасибо, DAC

2. как мы можем запустить populateHidden(), когда пользователь вручную вводит дату в текстовое поле? Потому что это не происходит прямо сейчас.

3. @dac: подключитесь к .keyup() событию в текстовом поле. Это означает, однако, что вам потребуется некоторая проверка перед вызовом populateHidden() .

Ответ №2:

Используйте следующий код:

    //get the current date
    var todaysDate = new Date();
    //format the date in the right format (add 1 to month because JavaScript counts from 0)
    var month = todaysDate.getMonth()   1 ;
    var date = todaysDate.getDate();
    var year =todaysDate.getFullYear() ;

    formatDate = month   '/'  
                   date  '/'  
                   year;
    //set the input value
    $('#CI').val(formatDate);       

    $("#CID").val(date);
    $("#CIM").val(month);
    $("#CIY").val(year);