我正在使用jquery对话框提醒用户删除表中的记录。以下是我的代码:
$('#deletebutton').click(function () {
if($(this).attr('disabled')=='disabled'){
//do nothing
}
else{
var isDeleteYes = false;
$('#delete-confirm').dialog({
height : 150,
width : 400,
autoOpen : true,
close: function( event, ui ) {
//alert(closed)
},
buttons : {
"Yes" : function () {
isDeleteYes = true;
$(this).dialog("close");
deleteFunction();
},
"No" : function () {
isDeleteYes=false;
$(this).dialog("close");
}
},
title : "Confirm Delete",
resizable : false,
modal : true,
overlay : {
opacity : 0.5,
background : "black"
}
});
}
});
function deleteFunction(){
/*
*
* Logic for delete
*
*/
}
问题是,在YES按钮中,我在函数调用 deleteFunction()之前关闭对话框。但是在函数完成执行之前它不会关闭。单击“是”或“否”时,将显示关闭功能中的警报。但是UI中没有关闭对话框。
答案 0 :(得分:2)
根据您的描述,这是因为您正在deleteFunction
中运行同步操作(这意味着一个脚本将在一个脚本之后运行,如果异步方式将并行运行)。
$(this).dialog("close");
脚本只会更新dom以隐藏元素,以隐藏浏览器重绘必须发生的视图中的元素。
在浏览器中,javascript和repaint / reflow函数都在同一个线程中运行(但是同步),这意味着一个将在前一个脚本完成操作后运行,所以即使对话框被标记为隐藏它也不会被隐藏查看,除非当前脚本执行结束,浏览器有机会执行重新流程。
一个解决问题的方法是使用超时,如果你想在异步模式下执行删除功能,如下所示
"Yes": function () {
isDeleteYes = true;
$(this).dialog("close");
setTimeout(deleteFunction, 1);
},
答案 1 :(得分:0)
如果在被调用方法(deleteFunction)中调用ajax,则将其设为“async:true”。它对我来说很好。我希望它会起作用。