Javascript AJAX加载的JQuery日期选择器仅在警报后工作

Javascript AJAX加载的JQuery日期选择器仅在警报后工作,javascript,jquery,ajax,datepicker,Javascript,Jquery,Ajax,Datepicker,我有一个很奇怪的问题。 我创建了一个指定了日期选择器的字段 此字段由AJAX调用加载到div中 总之,这已经起作用了。。但有一个陷阱。 只有在启动日期选择器之前设置了警报代码,它才会起作用 当我删除警报时。它只是停止工作 init代码位于另一个函数中: alert('kut'); $("#mini_calendar").datepicker({ defaultDate: "now", constrainInput: false, changeMonth: true,

我有一个很奇怪的问题。 我创建了一个指定了日期选择器的字段

此字段由AJAX调用加载到div中

总之,这已经起作用了。。但有一个陷阱。 只有在启动日期选择器之前设置了警报代码,它才会起作用

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

init代码位于另一个函数中:

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()”调用初始化代码

,而不发出您试图在DOM元素实际存在之前捕获它的警报

您应该等待文档就绪事件:

例如:

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

…或者简单地将javascript代码放在标记的底部(或者至少放在*#mini_calendar“元素之后)。

如果没有此警报,您将尝试在DOM元素实际存在之前捕获它

您应该等待文档就绪事件:

例如:

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

…或者简单地将javascript代码放在标记的底部(或者至少放在*#mini_calendar”元素之后)。

几天前,我也遇到了同样的问题,我是通过jquery load()函数实现的

$('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) { } }); }); $('body')。在('load change','your container element which#mini_calendar will load',function()上{ $(“#迷你日历”).日期选择器({ 默认日期:“现在”, 输入:false, 变化月:对, 月数:2, onClose:函数(selectedDate){ } }); }); 不要忘记替换容器元素选择器。否则代码将无法工作


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

几天前,我通过jquery load()函数也遇到了同样的问题

$('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) { } }); }); $('body')。在('load change','your container element which#mini_calendar will load',function()上{ $(“#迷你日历”).日期选择器({ 默认日期:“现在”, 输入:false, 变化月:对, 月数:2, onClose:函数(selectedDate){ } }); }); 不要忘记替换容器元素选择器。否则代码将无法工作


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

确保在加载字段后启动它。是否动态生成mini_calendar id元素?确保在加载字段后启动它。mini_calendar id元素是否动态生成?我不明白您的意思,我应该等待Document Ready事件因为它是由AJAX调用生成的。对不起。我忽略了这一点。但情况是一样的:您试图在元素实际存在之前捕获它。当然若您想更改Ajax调用完成后创建的元素,那个么依赖文档就绪事件也将不起作用。这是因为您需要侦听的事件是实际的对象创建。总之:您可以在创建该元素后(在Ajax成功回调中)添加显示的代码,调用包含该元素的函数,或者触发一些用户定义的事件进行侦听。这是一个解决方案,并附带一个间隔!!这是个好主意!!不,你做错了!!!当网络速度足够慢时,依赖间隔将再次失败。阅读我之前的评论:我写这个答案时认为#mini#calendar元素已经出现在文档的html中了。使用timeout有时会失败,而使用timeout检测何时工作(现在我看到了您的编辑)只是一个拙劣的工作。阅读我之前的评论:在创建日历元素之后,或者至少在触发某个元素之后,您需要在Ajax()请求的成功回调中执行此操作。我已经在成功时调用了它。请参阅我的编辑(阿姆斯特丹时间11:29),我不明白您的意思,我应该等待Document Ready事件,因为它是由AJAX调用生成的。对不起。我忽略了这一点。但情况是一样的:您试图在元素实际存在之前捕获它。当然若您想更改Ajax调用完成后创建的元素,那个么依赖文档就绪事件也将不起作用。这是因为您需要侦听的事件是实际的对象创建。总之:您可以在创建该元素后(在Ajax成功回调中)添加显示的代码,调用包含该元素的函数,或者触发一些用户定义的事件进行侦听。这是一个解决方案,并附带一个间隔!!这是个好主意!!不,你做错了!!!当网络速度足够慢时,依赖间隔将再次失败。阅读我之前的评论:我写这个答案时认为#mini#calendar元素已经出现在文档的html中了。使用timeout有时会失败,而使用timeout检测何时工作(现在我看到了您的编辑)只是一个拙劣的工作。阅读我之前的评论:在创建日历元素之后,或者至少在触发某个元素之后,您需要在Ajax()请求的成功回调中执行此操作。我已经在成功时调用了它。见我的编辑(阿姆斯特丹时间11:29)