Как я могу поставить min & maxDate для coconn & DateTimePicker

Я хотел бы поставить min & maxDate для моего сгенерированного DateTimePicker кокона. В моем приложении я мог бы поместить уникальный идентификатор для моего html, сгенерированного коконом.

В моем коде

  • DateTimePicker работает нормально.
  • если вы добавите что-то вроде "#new_id'+num" в мой код dp.change, вы не сможете запустить и произошла ошибка. "Uncaught TypeError: Невозможно прочитать свойство 'minDate' из неопределенного

Мне нужно поставить minDate & maxDate для моего сгенерированного DateTimepicker кокона.

Как я должен сделать?

var num = 0;
$(function() {
$('#tickets').on('cocoon:before-insert', function(e,ticket_to_be_added) {
 ticket_to_be_added.fadeIn('slow');
 ticket_to_be_added.attr('id', 'new_id'+ num);
});
$('#tickets').on('cocoon:after-insert', function(e,added_ticket) {
 set_datetimepicker();
 num++;
});
}

и set_datetimepicker(); ниже

function set_datetimepicker(){

var d = new Date();
d.setDate(d.getDate() + 6);
var y = new Date();
y.setDate(y.getDate() + 365);
var a = new Date();
a.setDate(a.getDate());
var b = new Date();
b.setDate(b.getDate() + 365);

       $('#new_id'+num+' .datetimepicker1').datetimepicker({
                    format: 'YYYY/MM/DD HH:mm',
                    showClose:true,                    
                    useCurrent:false,
                    minDate: d,
                    maxDate: y,
                    stepping: 15,
        });      

        $('#new_id'+num +' .datetimepicker2').datetimepicker({
                    format: 'YYYY/MM/DD HH:mm',
                    showClose:true,                    
                    useCurrent:false,
                    minDate: d,
                    maxDate: y,
                    stepping: 15,
        });      
        $('#new_id'+num +' .datetimepicker3').datetimepicker({
                    format: 'YYYY/MM/DD HH:mm',         
                    showClose:true,
                    useCurrent:false,
                    minDate: a,
                    maxDate: b,    
                    stepping: 15,

        });       

эти коды ниже не работают хорошо. "Uncaught TypeError: Не удалось прочитать свойство 'minDate' из undefined", помогите мне.

        $('#new_id'+num +' .datetimepicker1').on("dp.change", function (e) 
         $('#new_id'+num +' .datetimepicker2').data("DateTimePicker").minDate(e.date);
        });               
        $('#new_id'+num  +' .datetimepicker2').on("dp.change", function (e) {
            $('#new_id'+num  +' .datetimepicker1').data("DateTimePicker").maxDate(e.date);
            $('#new_id'+num  +' .datetimepicker3').data("DateTimePicker").maxDate(e.date);    
        }); 
        $('#new_id'+num  +' .datetimepicker3').on("dp.change", function (e) {

            $('#new_id'+num  +' .datetimepicker2').data("DateTimePicker").maxDate(e.date);                    

        }); 

1 ответ

Обратный вызов Cocoon дает вам вставленный HTML, так что вместо того, чтобы возиться с идентификаторами, просто используйте его:) Вы делаете это правильно в before-insert при установке идентификатора. Вместо этого я предлагаю: не устанавливать конкретный идентификатор, а просто использовать вставленный / добавленный HTML (который уже обернут в селектор jquery).

Так что, если вы передадите новый билет в вашу функцию, как

set_datetimepicker(added_ticket); 

тогда в вашем set_datetimepicker Вы можете просто использовать это (вместо того, чтобы пытаться найти это снова).

added_ticket.find('.datetimepicker1').data('DateTimePicker').maxDate(...)

Это теория. Теперь, глядя на ваш код более подробно, я вижу, что у вас есть три средства выбора даты и времени, и когда они меняются, они должны изменить / отразить это в своих родственных средствах выбора даты и времени.

Вы можете просто положиться на JQuery .on функциональность и относительная близость указателей даты и времени, в этом случае нет необходимости в обратных вызовах.

Так что сделайте что-то вроде:

$('#tickets').on('dp.change', '.datetimepicker1', function(e) {
   $(this).closest('.nested-fields').find('.datetimepicker2').data("DateTimePicker").maxDate(e.data);
})

Так что всякий раз, когда .datetimepicker1 изменяется, был ли он вставлен динамически или нет, если он находится внутри #tickets div, данный обратный вызов будет обработан. Обратный звонок будет сначала искать окружающие .nested-fields Div, а затем найти хотел .datetimepicker2 так что вы можете установить максимальную дату соответственно.

Другие вопросы по тегам