2013-07-02 236 views
0

我在aspx頁面上有以下標記,其中一個元素應該打開jQuery對話框。這裏是標記,JQuery打開對話框

<asp:Repeater ID="Repeater1" runat="server" > 
    <HeaderTemplate> 
    <table cellpadding="5" cellspacing="0" > 
    <tr align="center" > 
     <th align="center"><span><a href="#" style="color:Blue;background-color:#f2f2f2;" >Open Dialog</a></span></th> 
    </tr> 
    ....... 
</asp:Repeater> 

我想下面的JQuery函數打開對話框,但沒有工作,

$("th span a").click(function (e) { 
      e.preventDefault(); 
      var targetUrl = $(this).attr("href"); 

      $("#dialog").dialog({ 
       buttons: { 
        "Close": function() { 
         $(this).dialog("close"); 
        } 
       } 
      }); 

      $("#dialog").dialog("open"); 
     }); 

任何想法,缺什麼?

+0

首先,通過不設置'autoOpen:false'選項,您試圖打開它兩次。正如所寫的,你不需要'$(「#dialog」)。對話框(「打開」);',但是,離開它並將對話框初始化移動到點擊事件之外可能是明智的做法 – 2013-07-02 19:28:40

+0

試試在'dialog'之前添加'ContentPlaceHolder_'。 – PiLHA

回答

2

首先,您是否有ID爲dialog的元素?其次,你在click事件上創建一個已經打開的對話框,然後嘗試再次打開它。我建議像重寫:如果對話框doesnt已經存在

$(function() { 
    $(document).on('click', 'th span a', function(e) { 
     e.preventDefault(); 
     var targetUrl = $(this).attr("href"); 
     $("#dialog").dialog("open"); 
    }); 

    $('#dialog').dialog({ 
     autoOpen: false, 
     buttons: { 
      'Close': function(e, ui) { 
       $(this).dialog('close'); 
      } 
     } 
    }) 
}) 

,那麼你可以爲改寫:

<script type="text/javascript"> 
    var dlg; 
    $(function() { 
     $(document).on('click', 'th span a', function(e) { 
      e.preventDefault(); 
      var targetUrl = $(this).attr("href"); 
      dlg.dialog("open"); 
     }); 

     dlg = $('<div />', { id: 'dialog' }).dialog({ 
      autoOpen: false, 
      buttons: { 
       'Close': function(e, ui) { 
        $(this).dialog('close'); 
       } 
      } 
     }) 
    }) 
</script> 

當然,這第二種方式意味着創建和附加HTML的對話框DIV,否則它將是空的......永遠!

+0

謝謝@ bilbob533。你的代碼工作正常..是的,我有對話框ID的元素。 – Rishi