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

时间:2012-02-27 12:39:07

标签: asp.net ajax jquery jquery-tools

我在使用叠加层显示的弹出窗口中有一个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>

问题是它目前没有关闭任何东西。我用chrome调试模式双重检查,它来自方法但不做任何事情。我也检查过,没有JS错误。

我试着去做

$("#adm-form-addVariable").overlay({ api: true }).close()

但同样的问题。

以下是我如何宣布:

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

            closeOnClick: true
        }
    );

如果我这样做:

  

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

我得到一个未定义的。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我很确定你需要在触发元素上调用close,而不是覆盖:

http://jsfiddle.net/Fwzwc/2/

在您的情况下$(".adm-btn-overlay-trigger[rel]").overlay().close();

免责声明:之前我从未使用过jquery工具,但正如你在我的js小提琴中看到的那样,它似乎有效。

更新:要使用多个触发器工作,您似乎需要找到打开叠加层的确切触发器。有关此示例,请参阅http://jsfiddle.net/Fwzwc/3/

归结为找到叠加div的id,然后在触发器上调用.overlay()。close(),其中rel = overlayId:

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