我有两个按钮“保存”和“关闭”。 我需要关闭按钮在重定向回主页之前询问用户是否要保存的问题。以下代码显示了我想要完成的任务。
$('#closeButton').click(function() {
if(confirm("CloseWarning")) {
$('#saveButton').click();
window.location.href = "main.html";
} else {
window.location.href = "main.html";
}
});
但问题是saveButton click事件没有足够的时间在整个页面重定向之前完成。所以我的问题是在这种情况下进行回调的最佳方法是什么,以便点击保存按钮,然后我们重定向到主页面。
答案 0 :(得分:2)
假设您的保存按钮调用了javascript函数,您可以执行以下操作:
function saveFunction(doRedirect){
//normal save code
if(doRedirect)
window.location.href = "main.html";
}
注意:如果您的“普通保存代码”是AJAX调用,则应在您的ajax请求的成功回调中添加doRedirect
检查。
然后你就可以这样使用:
$('#closeButton').click(function() {
if(confirm("CloseWarning")) {
saveFunction(true);
} else {
window.location.href = "main.html";
}
});
使用您自己的回调的替代方法:
function saveFuncton(callback){
//normal save code
//when done (or on AJAX success)
if(callback)
callback(true);//or false if not successful
}
然后......
$('#closeButton').click(function() {
if(confirm("CloseWarning")) {
saveFunction(function(success){
if(success){
window.location.href = "main.html";
}
});
} else {
window.location.href = "main.html";
}
});
HACKY方法(除非你绝对没有其他替代方法,否则不要使用)
var isSaving = false;
$(document).ajaxStop(function () {
if (isSaving) {
window.location.href = "main.html";
}
});
然后......
$('#closeButton').click(function() {
if(confirm("CloseWarning")) {
isSaving = true;
$('#saveButton').click();
} else {
window.location.href = "main.html";
}
});
这可能会起作用,但这实际上取决于你的保存功能如何工作,以及是否还有其他任何东西可能同时进行ajax调用。此外,如果您保存函数执行多个AJAX调用,则此方法可能会失败。这是一种hacky方法,使用它需要您自担风险!
答案 1 :(得分:1)
您可以在触发数据时将数据传递给事件,因此您可以执行以下操作:
$('#closeButton').click(function(e) {
if(confirm('..')) {
$('#saveButton').trigger('click', [true]);
} else {
window.location.href = "main.html";
}
});
$('#saveButton').click(function(e, close) {
// do saving stuff ..
// for normal clicks "close" will be undefined, otherwise close when done
if(close) {
window.location.href = "main.html";
}
});
如果你想要更多DRY,你可以让saveButton中的结束代码成为closeButton的类似触发器,其中force
变量的类别会强制关闭,所以您不会在代码的两个不同部分重复重定向URL。
如果你不能修改你的保存逻辑(这似乎是一个有问题的东西,但没关系......)你可以这样做,假设保存逻辑包含一个AJAX调用而你没有任何其他的AJAX请求开除。如果您这样做,可以在关闭之前检查settings
变量以确保其正确:
$('#closeButton').click(function(e) {
if(confirm('..')) {
$(document).ajaxComplete(function(e, xhr, settings) {
window.location.href = "main.html";
});
$('#saveButton').click();
} else {
window.location.href = "main.html";
}
});
答案 2 :(得分:0)
无论在saveButton上执行什么脚本,都可以在保存表单时在变量中设置响应。然后检查它的值。这是一个例子:
$('#closeButton').click(function() {
if(confirm("CloseWarning")) {
$('#saveButton').click(function(){
// Code to save the form
if(saved == true){
window.location.href = "main.html";
}
});
} else {
window.location.href = "main.html";
}
});