动态添加删除按钮后删除事件 events.the 删除按钮不可见
Delete events after dynamically adding Delete button to events.the Delete button is not visible
我在使用删除按钮删除事件后向 ListDay 中的事件添加了删除按钮,删除按钮在全日历中不可见。
$('#cal2').fullCalendar({
height: 'auto',
defaultView: 'listDay',
events:this.myClonedArray,
defaultDate: this.startdate,
viewRender: function(view) {
$('.cal2 .fc-toolbar').css({
'display': 'none',
});
$(".fc-list-table .fc-list-heading .fc-widget-header").attr('colspan', 4);
$(".fc-list-table .fc-list-item").append('<td class="w3-center"><button class="fc-delete-item ">Delete</button></td>');
},
eventClick: function(event, jsEvent, view) {
var x = "" + event.id + "";
localStorage.setItem("delete_id", x);
$(".w3-center").on("click", function() {
var result = confirm("Delete Event");
if (result) {
console.log(event);
$('#cal2').fullCalendar('removeEvents', x);
}
});
}
});
之前:
之后:
您遇到的问题是您在呈现视图时添加了删除按钮。
但是,呈现视图(即日历网格)和呈现事件是不同的过程。您的代码目前只能(在启动时)工作,因为您从数组中加载了一组静态事件。如果您使用 AJAX 作为事件源,那么它将无法添加按钮,因为事件将晚于视图呈现(即具有 CSS 类 的元素不会'当您尝试使用 jQuery).select 时,它们还不存在。
这导致它在删除事件后失败的原因:删除单个事件会导致 所有 个事件 re-rendered(如果它们的位置或大小需要改变)。然而,它不会导致 视图 变为 re-rendered。因此添加删除按钮的代码不会 运行.
对此的明显解决方案是改用 eventAfterAllRender 回调。这确保每次在所有事件添加到日历后代码 运行s。
然而,这并不是最终的答案。您遇到的另一个棘手问题是您必须在 "Delete" 按钮上单击两次才能起作用。这是因为在用户至少单击一次事件之前,您没有将 "click" 事件附加到按钮。
解决这个问题的方法是使用eventRender回调将每个按钮单独添加到它的事件之前它已被添加到日历,然后直接离开将点击事件附加到它,因此当事件显示时它可以立即被点击。
所以实际上添加按钮的代码现在是在 eventRender 而不是 eventAfterAllRender。在此之前需要做的就是在列表 header 上设置 colspan...这可以在 viewRender 中很愉快地处理,因为在删除事件后不需要 re-drawing。
这是完整的代码:
$('#cal2').fullCalendar({
height: 'auto',
defaultView: 'listDay',
events: this.myClonedArray,
defaultDate: this.startdate,
viewRender: function(view) {
$('.cal2 .fc-toolbar').css({
'display': 'none',
});
$(".fc-list-table .fc-list-heading .fc-widget-header").attr('colspan', 4);
},
eventRender: function(event, element, view) {
element.append('<td class="w3-center"><button class="fc-delete-item ">Delete</button></td>');
element.find(".w3-center").on("click", function() {
var result = confirm("Delete Event");
if (result) {
console.log(event);
localStorage.setItem("delete_id", event.id);
$('#cal2').fullCalendar('removeEvents', event.id);
}
});
},
});
这是一个 运行 可用的演示:http://jsfiddle.net/108sad4f/3/
我在使用删除按钮删除事件后向 ListDay 中的事件添加了删除按钮,删除按钮在全日历中不可见。
$('#cal2').fullCalendar({
height: 'auto',
defaultView: 'listDay',
events:this.myClonedArray,
defaultDate: this.startdate,
viewRender: function(view) {
$('.cal2 .fc-toolbar').css({
'display': 'none',
});
$(".fc-list-table .fc-list-heading .fc-widget-header").attr('colspan', 4);
$(".fc-list-table .fc-list-item").append('<td class="w3-center"><button class="fc-delete-item ">Delete</button></td>');
},
eventClick: function(event, jsEvent, view) {
var x = "" + event.id + "";
localStorage.setItem("delete_id", x);
$(".w3-center").on("click", function() {
var result = confirm("Delete Event");
if (result) {
console.log(event);
$('#cal2').fullCalendar('removeEvents', x);
}
});
}
});
之前:
之后:
您遇到的问题是您在呈现视图时添加了删除按钮。
但是,呈现视图(即日历网格)和呈现事件是不同的过程。您的代码目前只能(在启动时)工作,因为您从数组中加载了一组静态事件。如果您使用 AJAX 作为事件源,那么它将无法添加按钮,因为事件将晚于视图呈现(即具有 CSS 类 的元素不会'当您尝试使用 jQuery).select 时,它们还不存在。
这导致它在删除事件后失败的原因:删除单个事件会导致 所有 个事件 re-rendered(如果它们的位置或大小需要改变)。然而,它不会导致 视图 变为 re-rendered。因此添加删除按钮的代码不会 运行.
对此的明显解决方案是改用 eventAfterAllRender 回调。这确保每次在所有事件添加到日历后代码 运行s。
然而,这并不是最终的答案。您遇到的另一个棘手问题是您必须在 "Delete" 按钮上单击两次才能起作用。这是因为在用户至少单击一次事件之前,您没有将 "click" 事件附加到按钮。
解决这个问题的方法是使用eventRender回调将每个按钮单独添加到它的事件之前它已被添加到日历,然后直接离开将点击事件附加到它,因此当事件显示时它可以立即被点击。
所以实际上添加按钮的代码现在是在 eventRender 而不是 eventAfterAllRender。在此之前需要做的就是在列表 header 上设置 colspan...这可以在 viewRender 中很愉快地处理,因为在删除事件后不需要 re-drawing。
这是完整的代码:
$('#cal2').fullCalendar({
height: 'auto',
defaultView: 'listDay',
events: this.myClonedArray,
defaultDate: this.startdate,
viewRender: function(view) {
$('.cal2 .fc-toolbar').css({
'display': 'none',
});
$(".fc-list-table .fc-list-heading .fc-widget-header").attr('colspan', 4);
},
eventRender: function(event, element, view) {
element.append('<td class="w3-center"><button class="fc-delete-item ">Delete</button></td>');
element.find(".w3-center").on("click", function() {
var result = confirm("Delete Event");
if (result) {
console.log(event);
localStorage.setItem("delete_id", event.id);
$('#cal2').fullCalendar('removeEvents', event.id);
}
});
},
});
这是一个 运行 可用的演示:http://jsfiddle.net/108sad4f/3/