gpt4 book ai didi

jquery - Ajax刷新后如何绑定(bind)jQuery Datepicker?

转载 作者:行者123 更新时间:2023-12-01 00:45:03 25 4
gpt4 key购买 nike

我有一个 jQuery 日期选择器,它对我来说非常有用,除了当我通过 ajax 刷新内容时,我丢失了日期选择器。据我所知,我应该使用 jQuery on() 将其绑定(bind)到输入,但我似乎找不到将其绑定(bind)到的正确事件。

第一次有效,但在后续刷新时无效:

$("[id^=startPicker]").datetimepicker({
showOn: "button",
buttonImage: "/img/calendar_icon.png",
buttonImageOnly: true,
dateFormat: 'mm/dd/yy',
timeFormat: 'hh:mm tt',
stepMinute: 1,
onClose: function (dateText, inst) {

var selectedDate = $(this).datepicker("getDate"); //Date object

$.ajax({
url: "/url",
dataType: "json",
method: 'post',
data: {
value: selectedDate.toDateString() + ' ' + selectedDate.toTimeString()
},
beforeSend: function () {
$("#loading").fadeIn();
},
success: function (data, textStatus) {
$("#content").html(data);
},
complete: function () {
$("#loading").fadeOut();
}
});
}
});

首次或后续刷新时不绑定(bind):

$('#content').on('ready', "[id^=startPicker]", function () {
$(this).datetimepicker({
showOn: "button",
buttonImage: "/img/calendar_icon.png",
buttonImageOnly: true,
dateFormat: 'mm/dd/yy',
timeFormat: 'hh:mm tt',
stepMinute: 1,
onClose: function (dateText, inst) {

var selectedDate = $(this).datepicker("getDate"); //Date object

$.ajax({
url: "/url",
dataType: "json",
method: 'post',
data: {
value: selectedDate.toDateString() + ' ' + selectedDate.toTimeString()
},
beforeSend: function () {
$("#loading").fadeIn();
},
success: function (data, textStatus) {
$("#content").html(data);
},
complete: function () {
$("#loading").fadeOut();
}
});
}
});
});

最佳答案

jQuery .on() 函数用于延迟事件处理,但它不适用于插件初始化。

它适用于事件,因为 DOM 模型将事件从 DOM 元素传播到其父元素,一直到顶部。因此,当您单击链接时,您还会单击包含该链接的任何内容(例如 div)、包含该容器的任何内容,依此类推,一直到 body 标签,最终是 document 本身。 .on() 通过绑定(bind)到公共(public)父元素而不是动态子元素的单击事件来利用这一点,因此可以添加/删除子元素,而不会丢失父元素上的事件处理程序。

不过,插件初始化不能以这种方式工作。为了在目标元素上初始化插件,它必须在元素本身上完成,这意味着该元素当时需要位于 DOM 中。因此,当您动态添加新元素时,您需要定位这些新元素并在它们上初始化插件。因此,AJAX 调用中的 success 函数需要执行此操作。

请注意,由于您的 AJAX 调用本身位于初始化过程中,因此您需要将其中一些拆分为单独的函数以供重复使用。否则,此重新初始化将无限期地嵌套在自身内部。

也许是这样的:

var datePickerClose = function (dateText, inst) {

var selectedDate = $(this).datepicker("getDate"); //Date object

$.ajax({
url: "/url",
dataType: "json",
method: 'post',
data: {
value: selectedDate.toDateString() + ' ' + selectedDate.toTimeString()
},
beforeSend: function () {
$("#loading").fadeIn();
},
success: function (data, textStatus) {
$("#content").html(data);
$("#content").find("[id^=startPicker]").each(function () {
bindDatePicker(this);
});
},
complete: function () {
$("#loading").fadeOut();
}
});
};

var bindDatePicker = function(element) {
$(element).datetimepicker({
showOn: "button",
buttonImage: "/img/calendar_icon.png",
buttonImageOnly: true,
dateFormat: 'mm/dd/yy',
timeFormat: 'hh:mm tt',
stepMinute: 1,
onClose: datePickerClose
});
};

$("[id^=startPicker]").each(function() {
bindDatePicker(this);
});

当然,这是未经测试的徒手代码,只是为了演示这个概念。它可能需要一些调整,并且可能有一种更优雅的方式来完成相同的逻辑。

关于jquery - Ajax刷新后如何绑定(bind)jQuery Datepicker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com