ric*_*chj 3 ajax jquery datepicker jquery-events
我有一个非常适合我的 jQuery 日期选择器,除了当我通过 ajax 刷新内容时,我丢失了日期选择器。据我所知,我应该使用 jQueryon()将其绑定到输入,但我似乎无法找到将其绑定到的正确事件。
第一次有效,但在后续刷新时无效:
$("[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();
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
第一次或后续刷新时不绑定:
$('#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();
}
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
jQuery.on()函数用于延迟事件处理,但不适用于插件初始化。
它适用于事件,因为 DOM 模型将事件从 DOM 元素传播到它们的父元素,一直到顶部。因此,当您单击一个链接时,您也同时单击了包含该链接的任何内容(div例如 a)、任何包含该容器的内容,等等,一直到body标签,最终是document其本身。 .on()通过绑定到公共父元素而不是动态子元素的点击事件来利用这一点,因此可以添加/删除子元素而不会丢失父元素上的事件处理程序。
但是,插件初始化不是这样工作的。为了在目标元素上初始化插件,它必须在元素本身上完成,这意味着该元素当时需要在 DOM 中。因此,当您动态添加新元素时,您需要定位这些新元素并在它们上初始化插件。因此,success来自 AJAX 调用的函数需要这样做。
请注意,由于您的 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);
});
Run Code Online (Sandbox Code Playgroud)
当然,这是未经测试的徒手代码,只是为了演示这个概念。它可能需要一些调整,并且可能有一种更优雅的方式来完成相同的逻辑。
| 归档时间: |
|
| 查看次数: |
18474 次 |
| 最近记录: |