我编写了一个名为confirmMessage(msg)
的函数来处理链接的onclick事件:
<a href="delete.php?id=12" onclick="return confirmMessage('Are You REALLY Sure?')">Delete</a>
该功能的代码是:
<script>
function confirmMessage(msg){
p = true
elementHtml = '<div id="ConfirmMessage">'+msg+'</div>';
$("body").append(elementHtml);
$("#ConfirmMessage").dialog({
resizable: false,
height:140,
modal: true,
buttons: {
"Delete": function() {
p = true;
$( this ).dialog( "close" );
},
Cancel: function() {
p = false;
$( this ).dialog( "close" );
}
}
}
);
return p;
}
</script>
在上面的函数中,我将变量p
设置为case容器,即true或false,最初我将其设置为true。此外,消息元素即时创建。但是,当我点击删除链接时,它不会等到我决定删除或取消它然后去删除。
当我最初将p
设置为false时,它不执行任何其他任何关闭对话框的决定。
此代码中的错误在哪里?!
答案 0 :(得分:2)
你的错误在于认为函数在返回之前等待你点击其中一个按钮。 .dialog()
显示对话框并立即返回。必须在回调函数中完成对用户交互的响应。
使用close:
处理程序在对话框关闭时运行代码:
$("#ConfirmMessage").dialog({
resizable: false,
height:140,
modal: true,
close: function() {
if (p) {
...
} else {
...
}
},
buttons: {
"Delete": function() {
p = true;
$( this ).dialog( "close" );
},
Cancel: function() {
p = false;
$( this ).dialog( "close" );
}
}
}
);
答案 1 :(得分:2)
jQuery对话框异步 - 它不会阻塞。该功能将继续并返回,无需等待响应。您需要使用以下代码:
function confirmMessage(msg,goto){
elementHtml = '<div id="ConfirmMessage">'+msg+'</div>';
$("body").append(elementHtml);
$("#ConfirmMessage").dialog({
resizable: false,
height:140,
modal: true,
buttons: {
"Delete": function() {
$( this ).dialog( "close" );
window.location.href=goto;
},
Cancel: function() {
$( this ).dialog( "close" );
},
},
});
return false;
}
和
<a href="delete.php?id=12" onclick="return confirmMessage('Are You REALLY Sure?',this.href)">Delete</a>
改变所以返回并不是实际确定发生了什么。
请参阅此JSFiddle。
答案 2 :(得分:0)
你甚至可以在看到模态窗口之前执行“返回p”。对话框方法是异步执行的