在执行函数之前,jQuery对话框不会关闭

时间:2015-07-02 04:54:09

标签: jquery dialog

我正在使用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中没有关闭对话框。

2 个答案:

答案 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”。它对我来说很好。我希望它会起作用。