【问题标题】:Asp.Net MVC/jQuery tools overlay: How to close it in an ajax returnAsp.Net MVC/jQuery 工具覆盖:如何在 ajax 返回中关闭它
【发布时间】:2012-02-27 12:39:06
【问题描述】:

我在与您的叠加层一起显示的弹出窗口中有一个 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()

我得到一个未定义的。

我做错了什么?

【问题讨论】:

    标签: asp.net ajax jquery jquery-tools


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 我试过了,效果很好。我试图理解为什么? [rel] 不是属性访问器吗?这是一个xpath表达式对吗?这可以解释为什么我以前不明白。 PS:jsfiddle 是多么了不起的工具啊!!!!以前不知道!!!不要犹豫,把这种工具转发给我 :) 超级粉丝 :)
    • jQuery 表达式基本上说:“具有 rel 属性的 .adm-btn-overlay-trigger 类的元素”。 jquery 工具似乎使用触发器存储有关覆盖的信息,而不是覆盖元素本身。这是一个设计选择。顺便说一句,我的初始解决方案不适用于多个触发器,因为 $(".adm-btn-overlay-trigger[rel]") 可以返回多个结果。我用可行的解决方案更新了我的答案。
    • 哦,我最近刚刚在 SO 上了解了 jsfiddler。确实是个好工具!
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多