ajax成功后关闭jquery确认对话框

时间:2014-10-08 12:48:53

标签: jquery ajax

如您所见,在触发ajax帖子之前,我有/无确认对话框。

成功后,确认对话框仍然可见。

我失踪了什么?

function AbandonOrder() {
    $('<div></div>').appendTo('body')
            .html('<div><strong>Abandon order? <br/> You will be unable to edit this order in the future.</strong></div>')
            .dialog({
                modal: true, title: 'Abandon order', zIndex: 10000, autoOpen: true,
                width: 400, resizable: false,
                buttons: {
                    Yes: function () {
                        jQuery.ajax({
                            url: 'some_URL',
                            type: "POST",
                            dataType: "JSON",
                            success: function (data) {
                                if (data == 'OKAY') {
                                    tosomething();
                                    $('#dlgCard').dialog("close");
                                }
                                else {
                                    $("#divMsg").html("<ul><li>This order cannot be edited.</li></ul>")
                                    $('#dlgMsg').dialog('open');
                                }
                                    //$(this).dialog("close");
                                    $(this).remove();
                            }
                        });
                    },
                    No: function () { $(this).dialog("close"); }
                },
                close: function (event, ui) { $(this).remove(); }
            });
    $('.ui-button-text').css({ fontSize: 12 });
    $('.ui-dialog-title').css({ fontSize: 12 });
}

我尝试了

 $(this).dialog("close");

 $(this).remove();

但确认仍然可见。

2 个答案:

答案 0 :(得分:0)

它是this的范围 - 在AJAX请求中,this将绑定到请求对象而不是DOM元素。为清楚起见,我在开始时将其删除:

var elem = $("<div></div>");
elem.html(...);

然后在你要关闭它的所有点上:

elem.dialog("close");

您还可以将context选项传递给AJAX请求,该请求会将this绑定到指定的对象:

// Assuming we have var elem as above
jQuery.ajax({context: elem[0], success: function() { $(this).dialog('close') }});

但这比在开始时提取变量要清楚得多。

答案 1 :(得分:0)

我认为你应该使用

$( "#dlgMsg" ).dialog( "close" );

当您打开dlgMsg对话框但是您试图关闭卡片对话框$('#dlgCard').dialog("close");