如何关闭对话框

时间:2013-09-28 05:44:32

标签: jquery

我有非常奇怪的行为,我在使用此

完成ajax调用时关闭对话框
     $.ajax({ 
        url: "",
        data     : { },
        type     : "POST",  
        dataType : "text",
        cache    : false,
        success: function(response) { // on success..
        },
        complete : function() {
             $("#dialogDiv").dialog("close");
             $("#dialogDiv").dialog("destroy");
             $("#dialogDiv").remove();
        },
        error : function(errMsg)
        {

            console.log("AJAX : submit : error");
            console.log(jsonToString(errMsg));
        }
    });

然而,我的问题是我的本地服务器中的有时关闭,有时不是,并且很多时候它不能在生产服务器上运行,我真的无法找出问题所在。有没有办法在完整的事件中强行关闭窗口?还是其他什么?

2 个答案:

答案 0 :(得分:1)

检查源代码,确保没有弹出多个对话框。由于您正在使用id jQuery,因此只会对匹配id的第一个DOM元素执行操作(因为id应该是页面唯一的。)

如果您要关闭所有对话框,我建议您将$("#dialogDiv")移至class,然后使用班级选择器. $(".dialogDiv")

最后,您应该缓存选择器,甚至更好地利用chaining Quick Guide: Chaining in Jquery

缓存示例:

var $dialogDiv = $('#dialogDiv");  // use the $ in the var to say -- Hey this is a jQuery object
$dialogDiv.dialog("close");
$dialogDiv.dialog("destroy");
$dialogDiv.remove();

如果您需要多次重复使用选择器,这非常有用。否则,您强制javascript重新分析同一元素的整个DOM结构。

链接示例:

$("#dialogDiv").dialog("close").dialog("destroy").remove();

这是有效的,因为jQuery在执行操作后返回一个对象。在这种情况下,您可能不需要closeremove因为destroy应该为您处理它,但如果没有它们,我就没有太多的例子。

答案 1 :(得分:1)

我找到了解决方案,非常奇怪的行为但它正在运行,而不是在complete事件中关闭弹出窗口我在done事件中关闭它并且它正在工作

    $.ajax({ 
        url: "",
        data     : {},
        type     : "POST",  
        dataType : "text",
        cache    : false,
        success: function(response) { // on success..

        },
        complete : function() {

        },
        error : function(errMsg)
        {
            console.log("AJAX : submit : error");
            console.log(jsonToString(errMsg));
        }
    }).done(function() {
        $("#dialogDiv").dialog("close");
        $("#dialogDiv").dialog("destroy");
        $("#dialogDiv").remove();
    });