2012-02-27 36 views
0

我在弹出窗口中显示了一个Ajax窗体,并显示了覆盖。我通过ajax提交弹出窗口,如果ajax调用已成功,我需要关闭覆盖。Asp.Net MVC/jQuery工具覆盖:如何在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外形addVariable”)覆盖({API:真})。 isOpened()

我得到一个未定义的。

我在做什么错?

回答

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(); 
+0

我试着和它的作品。我试图理解为什么?不是[rel]属性访问器?这是一个xpath表达式吧?这也许可以解释为什么我以前不明白。 PS:多么惊人的工具jsfiddle是!我以前不知道!不要犹豫,转发我这种工具:)巨大的风扇:) – J4N 2012-02-28 07:03:41

+1

jQuery表达式基本上说:“具有rel属性的class .adm-btn-overlay-trigger的元素”。 jquery工具似乎存储了与触发器有关的叠加信息,而不是叠加元素本身。这是一个设计选择。顺便说一句,我的初始解决方案不适用于多个触发器,因为$(“。adm-btn-overlay-trigger [rel]”)可以返回多个结果。我用一个可行的解决方案更新了我的答案。 – 2012-02-28 07:20:21

+0

哦,我刚刚在SO上了解到jsfiddler。确实是一个不错的工具 – 2012-02-28 07:21:02