Asp.NETMVC/jQuery工具覆盖:如何在ajax返回中关闭它

Asp.NETMVC/jQuery工具覆盖:如何在ajax返回中关闭它,asp.net,ajax,jquery,jquery-tools,Asp.net,Ajax,Jquery,Jquery Tools,我在弹出窗口中显示了一个Ajax表单,它与您的覆盖一起显示。我通过ajax提交弹出窗口,如果ajax调用成功,我需要关闭覆盖 以下是我目前的JS代码: <script type="text/javascript"> $(function () { // Handle form submit ... $("#AddVariableForm").live("submit", function (event) { event.

我在弹出窗口中显示了一个Ajax表单,它与您的覆盖一起显示。我通过ajax提交弹出窗口,如果ajax调用成功,我需要关闭覆盖

以下是我目前的JS代码:

<script type="text/javascript">
    $(function () {
        // Handle form submit ...
        $("#AddVariableForm").live("submit", function (event) {
            event.preventDefault();
            var form = $(this);
            $.validator.unobtrusive.parse('#AddVariableForm');
            $.ajax({
                url: form.attr('action'),
                type: "POST",
                data: form.serialize(),
                success: function (data) {
                    if(data.Success){
                        $("#adm-form-addVariable").data("overlay").close();
                    }
                },
                error: function (jqXhr, textStatus, errorThrown) {
                    alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
                },
                complete: function () {
                    alert('complete');
                }
            });
            return false;
        });
    });

</script>
但同样的问题

以下是我的声明:

   $(".adm-btn-overlay-trigger[rel]").overlay(
        {
            mask: {
                color: '#111',
                loadSpeed: 300,
                opacity: 0.9
            },

            closeOnClick: true
        }
    );
如果我这样做:

$(“#adm form addVariable”).overlay({api:true}).isOpened()

我得到一个未定义的


我做错了什么?

我很确定您需要调用触发器元素的close,而不是覆盖:

在您的例子中,
$(“.adm btn overlay trigger[rel]”)。overlay().close()

免责声明:我以前从未使用过jquery工具,但正如您在我的js小提琴中看到的,它似乎可以工作

更新:要使用多个触发器进行此操作,您似乎需要找到打开覆盖的确切触发器。请参阅,以获取此示例

它归结为查找覆盖div的id,然后在触发器上调用.overlay().close(),其中rel=overlayId:

$("img[rel='#" + overlayId + "']").overlay().close();

我试过了,效果很好。我想知道为什么?[rel]不是属性访问器吗?这是一个xpath表达式,对吗?这也许可以解释为什么我以前不明白。PS:JSFIDLE是多么神奇的工具啊!!!!我以前不知道!!!请毫不犹豫地转发给我这种工具:)超级粉丝:)jQuery表达式基本上是这样说的:“class.adm btn overlay trigger中具有rel属性的元素”。jquery工具似乎使用触发器存储有关覆盖的信息,而不是覆盖元素本身。这是一种设计选择。顺便说一句,我的初始解决方案不适用于多个触发器,因为$(“.adm btn overlay trigger[rel]”)可以返回多个结果。我用一个有效的解决方案更新了我的答案。哦,我最近在这里了解了jsfiddler。真是个好工具!
$("img[rel='#" + overlayId + "']").overlay().close();