关闭Jquery UI弹出窗口

时间:2013-11-26 20:53:56

标签: javascript jquery-ui

我编写了一个使用Jquery-ui的Javascript函数。 我可以用

关闭JQuery弹出窗口
$(this).dialog("close")

但是,如果我将它包含在If条件中,就像它在这里的代码中那样,它就不起作用了。 我错过了关于这个关键字在JS中如何运作的内容吗?

if (vars["server_url"] !== undefined)
        var serverUrl = vars["server_url"];
        var ODATA_ENDPOINT = "XRMServices/2011/OrganizationData.svc";
        var CRMObject = new Object();
        ///////////////////////////////////////////////////////////// 
        // Specify the ODATA entity collection 
        var ODATA_EntityCollection = "/custom_serviceobjectSet";



        var alreadyExisting = new Object;
        alreadyExisting.value = "";
        retrieveExistingPlacement(serverUrl, custom_name, placering.val(), alreadyExisting);
        setTimeout(function() {
            alert(alreadyExisting.value);
            if (alreadyExisting.value === true) {

                placering.addClass("ui-state-error");
                updateTips("Ett ServiceObject med sån placeringen redan finns.");
            }
            else if (alreadyExisting.value === false)
            {
            //alert(ordning.val());
            $("#users tbody").append("<tr>" +
                "<td>" + CRMObject.custom_order + "</td>" +
                "<td>" + CRMObject.custom_Placement + "</td>" +
                "<td>" + CRMObject.custom_Quantity + "</td>" +
                "</tr>");
            var jsonEntity = window.JSON.stringify(CRMObject);
            //Asynchronous AJAX function to Create a CRM record using OData 
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                datatype: "json",
                url: serverUrl + ODATA_ENDPOINT + ODATA_EntityCollection,
                data: jsonEntity,
                beforeSend: function(XMLHttpRequest) {
                    //Specifying this header ensures that the results will be returned as JSON. 
                    XMLHttpRequest.setRequestHeader("Accept", "application/json");
                },
                success: function(data, textStatus, XmlHttpRequest) {

                    var NewCRMRecordCreated = data["d"];
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    alert(serverUrl + ODATA_ENDPOINT + ODATA_EntityCollection);
                    alert(errorThrown);
                    alert(XMLHttpRequest.responseText);
                }
            });
                alert("OUT");

            }
        }, 1000);
        if (alreadyExisting.value === false) 
            $("#dialog-form").dialog("close");
}                   

2 个答案:

答案 0 :(得分:1)

你的问题在这里:

    if (alreadyExisting.value === false) 
        $(this).dialog("close");
    }

不再引用该对话框。通过对话框的ID访问它,而不是使用 this

    if (alreadyExisting.value === false) 
        $("#dialogId").dialog("close");
    }

答案 1 :(得分:1)

我假设你在问这个问题:

if (alreadyExisting.value === false) 
    $(this).dialog("close");
}

如果是这种情况,则此条件可能永远不会执行。那是因为早些时候你做了几行:

alreadyExisting.value = "";

当然你可以这样称呼:

retrieveExistingPlacement(serverUrl, custom_name, placering.val(), alreadyExisting);

如果未将alreadyExisting.value设置为false,则意味着永远不会触发对话框关闭逻辑。 setTimeout()函数中发生的任何事件都是异步发生的,因此它不会影响为alreadyExisting.value评估的值