2012-03-05 62 views
2

我有一個HTML鏈接,它打開一個包含iFrame的jQuery模式對話框。此iFrame包含應在回發後關閉對話框的表單(OkCancel)。ASP.NET回發之後關閉jQuery模式對話框再次打開它

在我的回覆中,我添加了一個Javascript函數給iFrame,它關閉了對話框並且工作正常。然而問題在於,在用戶按下OkCancel按鈕後,對話框關閉並再次打開!我究竟做錯了什麼?

這裏是我的代碼:

調用HTML頁面:

<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="theme/south-street.css" media="screen" id="themeCSS" /> 

    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $("#dlgConfirm").dialog({ 
       autoOpen: false, 
       resizable: false, 
       modal: true, 
       width: 550, 
       height: 300, 
       close: function (event, ui) { alert('closed') } 
      }) 
     }); 


     function fConfirm(tId) { 
      alert('ddd'); 
      $('#dlgConfirm').children().attr('src', 'ConfirmTracking.aspx?tId=' + tId) 
      .load(function() { 
       $("#dlgConfirm").dialog('open'); 
      }); 
      return false; 
     } 
    </script> 
</head> 
<body> 
    <div style="display: none"> 
     <div id="dlgConfirm" title="Confirm Tracking" style="padding: 0px"> 
      <iframe style="margin: 0px; padding: 0px" marginheight="0" marginwidth="0" src="" width="100%" height="100%" frameborder="0"></iframe> 
     </div> 
    </div> 

    <a href="#" onclick="return fConfirm('109')">Click me</a> 
</body> 
</html> 

的iFrame網頁

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ConfirmTracking.aspx.cs" Inherits="Chicken.ConfirmTracking" %> 
<html> 
<head runat="server"> 
    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script> 
    <script type="text/javascript"> 
     function CloseThis() { 
      parent.$('#dlgConfirm').dialog('close'); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <br /> 
     <asp:TextBox ID="edtTrackingNo" runat="server"></asp:TextBox> 
     <br /><br /> 
    <asp:Button ID="btnOk" runat="server" Text="Ok" /> 
    <asp:Button ID="btnCancel" runat="server" onclick="Cancel_Click" Text="Cancel" /> 
    </form> 
</body> 
</html> 

的iFrame代碼隱藏:

using System; 

namespace Chicken { 
    public partial class ConfirmTracking: System.Web.UI.Page { 
     protected void Page_Load(object sender, EventArgs e) { 

     } 

     protected void Cancel_Click(object sender, EventArgs e) { 
      ClientScript.RegisterClientScriptBlock(this.GetType(), "none", "<script>$(function(){CloseThis()});</script>"); 
     } 
    } 
} 

回答

1

我設法跟蹤您的問題,function fConfirm(tId)的負載在關閉對話框後再次觸發。這似乎是一個錯誤。解決這個問題的一個混亂方法是在頁面中添加一個全局變量,並將其設置爲true以顯示通過函數打開對話框,然後在打開對話框(如果變量爲true)時打開對話框。不要設置你的變量爲false,所以你可以重新打開對話框,如果需要的話。

的功能將類似於如下:

var loadedByFunction = false; 

    function fConfirm(tId) { 
     loadedByFunction = true; 
     $('#dlgConfirm').children().attr('src', 'ConfirmTracking.aspx?tId=' + tId) 
     .load(function() { 
      if (loadedByFunction) { 
       loadedByFunction = false; 
       $("#dlgConfirm").dialog('open'); 
      } 
     }); 
     return false; 
    } 
+0

雖然這是一個混亂的解決方案;)我會去用它,直到我得到了什麼更好的解決辦法 – AaA 2012-03-05 05:30:23

相關問題