0

我有非常奇怪的行为,我正在使用这个在完成 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));
        }
    });

但是我的问题是它有时关闭,有时不在我的本地服务器中,而且很多时候它在生产服务器上不起作用,我真的无法找出问题所在。有没有办法在完成事件中强制关闭窗口?还是别的什么?

4

2 回答 2

1

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

如果您想关闭所有对话框,那么我建议您将您$("#dialogDiv")移至 aclass并使用类选择.$(".dialogDiv")

最后,您应该缓存您的选择器,或者更好地利用chaining 快速指南:在 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应该为您处理它,但如果没有它们,我不会有太多的例子。

于 2013-09-28T06:15:27.767 回答
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();
    });
于 2013-09-28T07:21:07.757 回答