2

我在通过 ajax 更新的 div 中有一个 jquery datepicker。我可以在整个页面重新加载后打开一次 datepicker,但是在 ajax 只更新一个包含 datepicker 输入的 div 之后,我看不到 datepicker。我已经尝试过解决类似问题的解决方案,但没有运气。

我对 jquery 和 ajax 不是很熟悉,所以也许有人可以立即看到问题。

我有一个包含 ajax 的 jquery 函数:

function example(){
$.ajax({
  url: "page.php",
  cache: false, 
  success: function(data){
    $('#div').html(data);
  }
});

}

Ajax 重新加载一个 div,其中有一个 datepicker 输入,如下所示:

<input type="text" id="datepicker"/>

Datepicker 是这样构造的:

$(function() {
    $("#datepicker").datepicker({dateFormat: "dd.mm.yy"});
    $.datepicker.setDefaults(
        $.extend(
            {'dateFormat':'yy-mm-dd'},
            $.datepicker.regional['fi']
        )
    );
});

我必须做什么,才能在每次通过 ajax 更新 div 时看到 datepicker?一些建议 datepicker 在 ajax 成功时刷新,我没有让它以这种方式工作,或者不知道如何!

4

2 回答 2

2

.datepicker()一种方法是在 ajax 成功时重新运行初始化程序。

将日期选择器代码更改为:

function applyDatepicker(elem) {
    $(elem).datepicker({dateFormat: "dd.mm.yy"});
    //... Your datepicker code
}

然后一旦准备好文件:

$(document).ready(function(){
    applyDatepicker('#datepicker');
})

并且一旦在您的 ajax 成功回调中:

$.ajax({
    //... other ajax params,
    success: function(){
        //... success callback code
        applyDatepicker('#datepicker');
    }
});

此外,正如@adrenalin所建议的那样,找出最佳实践的唯一方法是更多地了解您的代码。


一个建议是将元素更改为具有 aclass="datepicker"而不是 aid的主要原因是页面中可能有多个日期选择器,并且 id 始终是唯一的。作为初学者,我建议最简单的方法是尝试将 ID 想象为元素的专有名词,而 Class 将是普通名词或形容词!

于 2013-07-31T08:51:58.643 回答
0

需要初始化日期选择器,因为您使用 AJAX 加载的元素是全新的元素,并且在您首先初始化它时不存在。任何原始事件都不再绑定到新元素。在 AJAX 加载成功回调上执行此操作(这取决于您执行此操作的方式。

这实际上取决于如何构造代码来判断最佳实践是什么,但是如果您通常只在一个地方加载内容,请重复 datepicker 初始化或将其包装在一个函数中并在需要的地方调用它。

于 2013-07-31T08:48:20.633 回答