我怎么能把min& maxDate for coconn&的DateTimePicker

时间:2016-10-19 05:09:19

标签: javascript jquery datetimepicker cocoon-gem eonasdan-datetimepicker

我想把min&我的茧的maxDate生成了DateTimePicker。 在我的应用程序中,我可以管理为我的茧生成html的唯一ID。

在我的代码中,

  • DateTimePicker工作正常。
  • 如果你在我的dp.change代码中输入“#new_id'+ num”之类的东西, 你不能发生火灾和错误。 “未捕获的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,

        });       

以下这些代码效果不佳。 “未捕获的TypeError:无法读取未定义的属性'minDate'” 请帮帮我。

        $('#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 个答案:

答案 0 :(得分:0)

cocoon回调为你提供了插入的html,所以不要使用id,只需使用它:)你在设置id时在before-insert中正确执行。相反,我建议:做设置一个特定的id,只使用插入/添加的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,以便您可以相应地设置最大日期。