2016-08-18 73 views
0

我有一个很奇怪的问题。 我创建了一个分配日期选择器的字段。AJAX加载JQuery日期选择器只在警报后工作

此字段正在通过AJAX调用加载到div中。

总结这工作已经..但有一个问题。 只有在启动日期选择器之前设置了警报代码才有效。

当我删除警报。它只是停止工作。

初始化代码是另一个函数中:

alert('kut'); 
$("#mini_calendar").datepicker({ 
    defaultDate: "now", 
    constrainInput: false, 
    changeMonth: true, 
    numberOfMonths: 2, 
    onClose: function (selectedDate) { 
    } 
});  

我希望有人知道我做错了。

编辑

万分感谢。

解决的办法是:

interval = setInterval(function(){ 
     if($("#mini_calendar").length > 0) { 
      $("#mini_calendar").datepicker({ 
       defaultDate: "now", 
       constrainInput: false, 
       changeMonth: true, 
       numberOfMonths: 2, 
       onClose: function (selectedDate) { 
       } 
      }); 
      clearInterval(interval); 
     } 
    }, 300); 

编辑:

我呼吁这些Ajax的成功:

///######## IN CASE OF SUCCESS 
    success: function (response) { 
     if (response != '') { 
      $("[@targetDiv]").html(response); 
      DateNav_CalendarInit(DisplayType); 
     } 
     else { 
      alert('error! Something went wrong during the obtaining of data!'); 
     } 
    } 

的 “DateNav_CalendarInit()” 调用初始化代码

+0

请确保在加载字段后启动它。 – Mairaj

+1

是否会动态生成mini_calendar标识元素? –

回答

2

没有警报你是试图在实际存在之前捕获DOM元素。

你应该等待文档准备事件:

例子:

$(function(){ 
    // .. your code here .. 
} 

...或者干脆把你的JavaScript代码在标签的底部(或至少后*# mini_calendar”元素)。

+0

我实际上并没有明白你的意思,我应该等待Document Ready事件,因为它是由AJAX调用产生的。 –

+0

对不起。我忽略了这一点。但情况是一样的:你试图在**实际存在之前捕获一个元素**。 当然。如果您想更改在Ajax调用完成后创建的元素,则依赖于Document Ready事件也不起作用。这是因为你需要倾听的事件是实际的对象创建。总结:您可以在创建该元素(在Ajax成功回调函数中)后追加显示的代码,调用包含它的函数,或者触发某个用户定义的事件来侦听。 – bitifet

+0

这是一个间隔的解决方案!这已经是一个好主意! –

0

我也jQuery的负荷面临着同样的问题,前几天我这样做()函数。

 

$('body').on('load change','your container element in which #mini_calendar will load',function(){ 
    $("#mini_calendar").datepicker({ 
     defaultDate: "now", 
     constrainInput: false, 
     changeMonth: true, 
     numberOfMonths: 2, 
     onClose: function (selectedDate) { 
     } 
    }); 
}); 

不要忘记更换容器元素选择器。否则代码将不起作用

如果不是这样,您可以设置间隔来检查$('mini_calendar')是否存在于元素中。

相关问题