javascript 保留旧变量
javascript holding onto old variable
我正在使用 JQueryFullCaledar 并编写了一个函数来劫持 eventclick。默认情况下它只是 运行 这个代码:
var id = event.id;
$.ajax({
url:"delete.php",
type:"POST",
data:{id:id},
success:function()
{
calendar.fullCalendar('refetchEvents');
//alert("Event Removed");
}
})
我劫持了这个事件,改为打开一个提供三个选项的上下文菜单:
编辑,删除关闭菜单。如果他们选择删除,它会运行与以前相同的功能,但会使用 if 语句(由甜蜜警报辅助)来检查他们是否确定。
如果他们选择关闭,它只会关闭菜单
如果他们选择编辑,它会通过 AJAX 将约会 ID 发送到 PHP 文件,这样我就可以更新它。我注意到在更新其中一些时,在前几次打开后约会不正确。所以,我添加了一个 catch 以在运行 AJAX.When 之前提醒约会的 ID 我打开我的第一个约会,我收到一个带有第一个约会 ID 的警报。我关闭它,然后打开另一个,此时我首先收到第一个 ID 的警报,然后是新 ID 的第二个警报,然后打开另一个约会给我这两个警报,第三个警报和第三个约会 ID 等等。 .. 我尝试在单击取消或保存编辑文件时将 ID 设置为空白,但没有成功。
事件点击函数的完整代码如下:
eventClick:function(event)
{
$('.appt_menu').removeClass('hidden').css( {position:"absolute", top:event.pageY, left: event.pageX});
$('a.close_menu').on("click",function(){
$('.appt_menu').addClass('hidden');
})
$('a.edit_appt').on("click",function(){
$('.appt_menu').addClass('hidden');
//show me the ID before sending it via AJAX
alert(event.id);
$('#modalwindow').load("Form_Edit_Appt.php", {id: event.id}, function(data) { calendar.fullCalendar('refetchEvents');});
$('.backdropper, #modalwindow').addClass('show');
}); //end of edit appt function
$('a.delete_appt').on("click",function(){
$('.appt_menu').addClass('hidden');
swal({
title: "Are you sure you want to delete this Appointment?",
text: "Once deleted, you will not be able to recover this imaginary file!",
icon: "warning",
buttons: ["Not that one!", "Yep, delete it!"],
//buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
swal("Your Appointment has been deleted!", {
icon: "success",
});
var id = event.id;
$.ajax({
url:"delete.php",
type:"POST",
data:{id:id},
success:function()
{
calendar.fullCalendar('refetchEvents');
//alert("Event Removed");
}
})
} else {
swal("Your Appointment has not been removed!");
}
});
})
},
您每次执行初始 eventClick 时都在绑定事件处理程序。每次设置点击处理程序时尝试使用 off() 取消绑定,以便删除任何以前设置的处理程序。
示例:
$('a.edit_appt').off().click(function() {
//your code
});
您在每次单击日历时将事件处理程序附加到 edit_appt
。当您附加一个处理程序时,前一个处理程序不会被删除,它会堆叠起来。您应该只附加一次(或在附加新处理程序之前删除以前的处理程序)。您可以将事件 ID 存储到变量中并在点击处理程序中使用它。
var eventId;
eventClick: function(event) {
$('.appt_menu').removeClass('hidden').css({
position: "absolute",
top: event.pageY,
left: event.pageX
});
eventId = event.id;
}
$('a.close_menu').on("click", function() {
$('.appt_menu').addClass('hidden');
});
$('a.edit_appt').on("click", function() {
if (!eventId)
return;
$('.appt_menu').addClass('hidden');
//show me the ID before sending it via AJAX
alert(eventId);
$('#modalwindow').load("Form_Edit_Appt.php", {
id: eventId
}, function(data) {
calendar.fullCalendar('refetchEvents');
});
$('.backdropper, #modalwindow').addClass('show');
}); //end of edit appt function
$('a.delete_appt').on("click", function() {
if (!eventId)
return;
$('.appt_menu').addClass('hidden');
swal({
title: "Are you sure you want to delete this Appointment?",
text: "Once deleted, you will not be able to recover this imaginary file!",
icon: "warning",
buttons: ["Not that one!", "Yep, delete it!"],
//buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
swal("Your Appointment has been deleted!", {
icon: "success",
});
var id = eventId;
$.ajax({
url: "delete.php",
type: "POST",
data: {
id: id
},
success: function() {
calendar.fullCalendar('refetchEvents');
//alert("Event Removed");
}
})
} else {
swal("Your Appointment has not been removed!");
}
});
});
我正在使用 JQueryFullCaledar 并编写了一个函数来劫持 eventclick。默认情况下它只是 运行 这个代码:
var id = event.id;
$.ajax({
url:"delete.php",
type:"POST",
data:{id:id},
success:function()
{
calendar.fullCalendar('refetchEvents');
//alert("Event Removed");
}
})
我劫持了这个事件,改为打开一个提供三个选项的上下文菜单:
编辑,删除关闭菜单。如果他们选择删除,它会运行与以前相同的功能,但会使用 if 语句(由甜蜜警报辅助)来检查他们是否确定。
如果他们选择关闭,它只会关闭菜单
如果他们选择编辑,它会通过 AJAX 将约会 ID 发送到 PHP 文件,这样我就可以更新它。我注意到在更新其中一些时,在前几次打开后约会不正确。所以,我添加了一个 catch 以在运行 AJAX.When 之前提醒约会的 ID 我打开我的第一个约会,我收到一个带有第一个约会 ID 的警报。我关闭它,然后打开另一个,此时我首先收到第一个 ID 的警报,然后是新 ID 的第二个警报,然后打开另一个约会给我这两个警报,第三个警报和第三个约会 ID 等等。 .. 我尝试在单击取消或保存编辑文件时将 ID 设置为空白,但没有成功。
事件点击函数的完整代码如下:
eventClick:function(event)
{
$('.appt_menu').removeClass('hidden').css( {position:"absolute", top:event.pageY, left: event.pageX});
$('a.close_menu').on("click",function(){
$('.appt_menu').addClass('hidden');
})
$('a.edit_appt').on("click",function(){
$('.appt_menu').addClass('hidden');
//show me the ID before sending it via AJAX
alert(event.id);
$('#modalwindow').load("Form_Edit_Appt.php", {id: event.id}, function(data) { calendar.fullCalendar('refetchEvents');});
$('.backdropper, #modalwindow').addClass('show');
}); //end of edit appt function
$('a.delete_appt').on("click",function(){
$('.appt_menu').addClass('hidden');
swal({
title: "Are you sure you want to delete this Appointment?",
text: "Once deleted, you will not be able to recover this imaginary file!",
icon: "warning",
buttons: ["Not that one!", "Yep, delete it!"],
//buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
swal("Your Appointment has been deleted!", {
icon: "success",
});
var id = event.id;
$.ajax({
url:"delete.php",
type:"POST",
data:{id:id},
success:function()
{
calendar.fullCalendar('refetchEvents');
//alert("Event Removed");
}
})
} else {
swal("Your Appointment has not been removed!");
}
});
})
},
您每次执行初始 eventClick 时都在绑定事件处理程序。每次设置点击处理程序时尝试使用 off() 取消绑定,以便删除任何以前设置的处理程序。
示例:
$('a.edit_appt').off().click(function() {
//your code
});
您在每次单击日历时将事件处理程序附加到 edit_appt
。当您附加一个处理程序时,前一个处理程序不会被删除,它会堆叠起来。您应该只附加一次(或在附加新处理程序之前删除以前的处理程序)。您可以将事件 ID 存储到变量中并在点击处理程序中使用它。
var eventId;
eventClick: function(event) {
$('.appt_menu').removeClass('hidden').css({
position: "absolute",
top: event.pageY,
left: event.pageX
});
eventId = event.id;
}
$('a.close_menu').on("click", function() {
$('.appt_menu').addClass('hidden');
});
$('a.edit_appt').on("click", function() {
if (!eventId)
return;
$('.appt_menu').addClass('hidden');
//show me the ID before sending it via AJAX
alert(eventId);
$('#modalwindow').load("Form_Edit_Appt.php", {
id: eventId
}, function(data) {
calendar.fullCalendar('refetchEvents');
});
$('.backdropper, #modalwindow').addClass('show');
}); //end of edit appt function
$('a.delete_appt').on("click", function() {
if (!eventId)
return;
$('.appt_menu').addClass('hidden');
swal({
title: "Are you sure you want to delete this Appointment?",
text: "Once deleted, you will not be able to recover this imaginary file!",
icon: "warning",
buttons: ["Not that one!", "Yep, delete it!"],
//buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
swal("Your Appointment has been deleted!", {
icon: "success",
});
var id = eventId;
$.ajax({
url: "delete.php",
type: "POST",
data: {
id: id
},
success: function() {
calendar.fullCalendar('refetchEvents');
//alert("Event Removed");
}
})
} else {
swal("Your Appointment has not been removed!");
}
});
});