Javascript AJAX在插入之前添加多个事件重置Id
在完整日历中,我有一些可拖放的外部项目。当我拖放其中一个并立即删除它时,它会被删除,一切正常。然而,当我删除多个项目时,例如2个项目,当我删除其中2个项目时,这两个项目都会从视图中的日历中删除,实际上有一个项目会从数据库中删除,如果我刷新页面,我可以看到这一点 当我检查表单input hidden的值时,它是从数据库获取的事件id,或者是通过ajax从数据库返回的作为最后一个insert id的事件id,两者看起来是相同的,实际上它们是不同的 我想我需要的是,在eventID变量被拖放后重置它们。我试着把它们初始化为空的,但没用 在ajax提交下一个单元后,如何重置它们的值,从而使该变量保持连接到当前单元。这也是一个全局变量,我认为这就是问题所在 我的代码:Javascript AJAX在插入之前添加多个事件重置Id,javascript,jquery,ajax,fullcalendar,Javascript,Jquery,Ajax,Fullcalendar,在完整日历中,我有一些可拖放的外部项目。当我拖放其中一个并立即删除它时,它会被删除,一切正常。然而,当我删除多个项目时,例如2个项目,当我删除其中2个项目时,这两个项目都会从视图中的日历中删除,实际上有一个项目会从数据库中删除,如果我刷新页面,我可以看到这一点 当我检查表单input hidden的值时,它是从数据库获取的事件id,或者是通过ajax从数据库返回的作为最后一个insert id的事件id,两者看起来是相同的,实际上它们是不同的 我想我需要的是,在eventID变量被拖放后重置它们
var eventID; // global variable
下降功能:
drop: function(date, allDay) {
var originalEventObject = $(this).data('eventObject');
// we need to copy it, so that multiple events don't have a reference to the same object
var copiedEventObject = $.extend({}, originalEventObject);
// assign it the date that was reported
copiedEventObject.start = date;
if($extraEventClass) copiedEventObject['className'] = [$extraEventClass];
var tempDate = new Date(date);
copiedEventObject.start = $.fullCalendar.formatDate(copiedEventObject.start, "yyyy-MM-dd HH:mm:ss");
eventID = '';
$.ajax({
url: '<?=site_url("admin/calendar/add");?>',
data: 'title='+ copiedEventObject.title,
type: "POST",
success: function(newID){
eventID = newID;
//copiedEventObject._id = newID;
}
});
calendar.fullCalendar('renderEvent',
{
title: copiedEventObject.title,
start: date,
//id: copiedEventObject._id,
id: eventID,
}),
true // make the event "stick"
}
eventClick: function(calEvent, jsEvent, view) {
if(!eventID){
eventID = calEvent._id;
}
var form = $("<form id='changeName'>" +
"<h3 class='eventHeader'>Edit</h3>" +
"</div></form>");
form.append("<div class='controls'>" +
"<label class='control-label' for='title'>Name: </label>" +
"<input class='span3' name='title' autocomplete=off type='text' value='" + calEvent.title + "' />" +
"</div>");
form.append("<input type=hidden value='" + eventID + "' /> ");
form.append("<div class='controls'>" +
"<button type='submit'> Save </button>");
var div = bootbox.dialog(form,
[
{
"label" : "Delete",
"callback": function() {
deleteOrNot = confirm("Sure ??");
if (deleteOrNot) {
calendar.fullCalendar('removeEvents' , function(ev){
$.ajax({
url: '<?=site_url("admin/calendar/delete");?>',
data: 'id='+ eventID,
type: "POST"
});
return (ev._id == calEvent._id);
})
}
}
}
]);
$("#changeName").submit(function() {
calEvent.title = form.find("input[name=title]").val();
calEvent.description = form.find("input[name=description]").val();
calEvent.id = form.find("input[type=hidden]").val();
$.ajax({
url: '<?=site_url("admin/calendar/editTitle");?>',
data: 'title='+ calEvent.title+'&id='+ calEvent.id,
type: "POST"
});
calendar.fullCalendar('updateEvent', calEvent);
div.modal("hide");
return false;
});
}
drop:function(日期,全天){
var originalEventObject=$(this.data('eventObject');
//我们需要复制它,这样多个事件就不会引用同一个对象
var copiedEventObject=$.extend({},originalEventObject);
//将其指定为报告的日期
copiedEventObject.start=日期;
如果($extraEventClass)CopiedEventToObject['className']=[$extraEventClass];
var tempDate=新日期(日期);
copiedEventObject.start=$.fullCalendar.formatDate(copiedEventObject.start,“yyyy-MM-dd HH:MM:ss”);
eventID='';
$.ajax({
url:“”,
数据:“title=”+copiedEventObject.title,
类型:“POST”,
成功:函数(newID){
eventID=newID;
//copiedEventObject.\u id=newID;
}
});
日历。完整日历('renderEvent',
{
标题:copiedEventObject.title,
开始日期:,
//id:copiedEventObject.\u id,
id:eventID,
}),
true//使事件“持续”
}
事件单击功能:
drop: function(date, allDay) {
var originalEventObject = $(this).data('eventObject');
// we need to copy it, so that multiple events don't have a reference to the same object
var copiedEventObject = $.extend({}, originalEventObject);
// assign it the date that was reported
copiedEventObject.start = date;
if($extraEventClass) copiedEventObject['className'] = [$extraEventClass];
var tempDate = new Date(date);
copiedEventObject.start = $.fullCalendar.formatDate(copiedEventObject.start, "yyyy-MM-dd HH:mm:ss");
eventID = '';
$.ajax({
url: '<?=site_url("admin/calendar/add");?>',
data: 'title='+ copiedEventObject.title,
type: "POST",
success: function(newID){
eventID = newID;
//copiedEventObject._id = newID;
}
});
calendar.fullCalendar('renderEvent',
{
title: copiedEventObject.title,
start: date,
//id: copiedEventObject._id,
id: eventID,
}),
true // make the event "stick"
}
eventClick: function(calEvent, jsEvent, view) {
if(!eventID){
eventID = calEvent._id;
}
var form = $("<form id='changeName'>" +
"<h3 class='eventHeader'>Edit</h3>" +
"</div></form>");
form.append("<div class='controls'>" +
"<label class='control-label' for='title'>Name: </label>" +
"<input class='span3' name='title' autocomplete=off type='text' value='" + calEvent.title + "' />" +
"</div>");
form.append("<input type=hidden value='" + eventID + "' /> ");
form.append("<div class='controls'>" +
"<button type='submit'> Save </button>");
var div = bootbox.dialog(form,
[
{
"label" : "Delete",
"callback": function() {
deleteOrNot = confirm("Sure ??");
if (deleteOrNot) {
calendar.fullCalendar('removeEvents' , function(ev){
$.ajax({
url: '<?=site_url("admin/calendar/delete");?>',
data: 'id='+ eventID,
type: "POST"
});
return (ev._id == calEvent._id);
})
}
}
}
]);
$("#changeName").submit(function() {
calEvent.title = form.find("input[name=title]").val();
calEvent.description = form.find("input[name=description]").val();
calEvent.id = form.find("input[type=hidden]").val();
$.ajax({
url: '<?=site_url("admin/calendar/editTitle");?>',
data: 'title='+ calEvent.title+'&id='+ calEvent.id,
type: "POST"
});
calendar.fullCalendar('updateEvent', calEvent);
div.modal("hide");
return false;
});
}
event单击:函数(calEvent、jsEvent、view){
如果(!eventID){
eventID=calEvent.\u id;
}
变量形式=$(“”+
“编辑”+
"");
格式。追加(“”)+
“姓名:”+
"" +
"");
格式.附加(“”);
格式。追加(“”)+
“保存”);
var div=bootbox.dialog(形式,
[
{
“标签”:“删除”,
“回调”:函数(){
deleteOrNot=确认(“确定”);
如果(删除或不删除){
calendar.fullCalendar('removeEvents',函数(ev){
$.ajax({
url:“”,
数据:“id=”+eventID,
类型:“职位”
});
返回(ev.\U id==calEvent.\U id);
})
}
}
}
]);
$(“#changeName”).submit(函数(){
calEvent.title=form.find(“输入[name=title]”).val();
calEvent.description=form.find(“输入[name=description]”).val();
calEvent.id=form.find(“输入[type=hidden]”).val();
$.ajax({
url:“”,
数据:'title='+calEvent.title+'&id='+calEvent.id,
类型:“职位”
});
calendar.fullCalendar('updateEvent',calEvent);
模态分类(“隐藏”);
返回false;
});
}
在删除过程中……您不应该依赖全局事件ID
,而应该仅从特定事件获取ID
更改:
if(!eventID){
eventID = calEvent._id;
}
致:
我怀疑您在每次删除多个时使用全局eventID
在drop
中也会遇到问题。必须看看这里的一些方法做了什么
我的建议是完全去掉全局eventID
。添加时,等待服务器返回id,然后在成功回调中将数据传递给fullCalandar
类似地,在deleteOrNot中,应该首先发出ajax请求,然后只调用
calendar.fullCalendar('removeEvents'
在$.ajax的成功回调中。这将在用户看到事件被删除之前确认ajax成功。如果ajax失败,用户将不知道使用您的方法当我从eventID全局变量中删除时,复制对象的id不能像我尝试的那样设置。还添加了方法部分。好的……问题是AJAX
是异步的…在成功回调中移动calendar.fullCalendar('renderEvent',
,否则它会在AJAX完成之前触发只是需要始终思考…“确保在更新用户界面之前更新数据库”再次非常感谢,感谢您,很高兴有这样的体验。