2012-06-13 22 views
0

我想從內部關閉jquery對話框,但它不起作用。無法關閉從內部的jquery對話框

我已經使用了我能找到的所有閉合變體,但都沒有工作。

該對話框從主頁面調用。當我按下對話框上的提交按鈕時,表單被髮布(這一切都正常),但關閉事件不會觸發。

 $(document).ready(function() { 

      $("#eventForm").submit(function(e) { 

       alert("HELLO"); 
       //Cancel the link behavior 
       e.preventDefault(); 

       if(document.eventForm.title.value == ""){ 
        alert("<?php echo $lang['titlemissing'] ?>"); 
        return; 
       } 


       if(document.eventForm.activity.value == ""){ 
        alert("<?php echo $lang['activitymissing'] ?>"); 
        return; 
       } 

       var url = "calendar/eventsubmit.php<?php echo $qstr ?>"; 


       $.post(
       "calendar/eventsubmit.php<?php echo $qstr ?>", 
       $(this).serialize(), 
        function(data){ 
          alert("closing"); 
          } 
       ); 
        // NONE of the work ??? 
        $(this).closest('.ui-dialog').dialog('close'); 
        $(this).closest('#dialog').dialog('close'); 
        $(this).closest('.ui-dialog-content').dialog('close'); 
        $(this).dialog('destroy'); 
        $(this).dialog('close'); 
        $(this).closest('#dialog').close(); 
      $('#dialog').dialog('close'); 


      }); 
     }); 

DOM確實包含ui-dialog和ui-dialog-content元素。

<div tabindex="-1" class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" role="dialog" aria-labelledby="ui-dialog-title-dialog" style="z-index: 1004; > 
<div class="window ui-dialog-content ui-widget-content" id="dialog" style="min-height: 0px; width: auto; display: block; height: 105px;"> 

編輯

了很多調整它的後現在的作品。關鍵是,我沒有包含jquery-custom css。相反,我用我自己的css也有一個ui-dialog元素。我不確定,但如果這是解決這個問題的方法。但這是我最好的猜測。

這是最終的代碼。

<script> 
     // submit the event (add, update) 
     $(document).ready(function() { 

      $("#eventForm").submit(function(e) { 

       //Cancel the link behavior 
       e.preventDefault(); 

       if(document.eventForm.title.value == ""){ 
        alert("<?php echo $lang['titlemissing'] ?>"); 
        return; 
       } 

       if(document.eventForm.activity != undefined){ 

        if(document.eventForm.activity.value == ""){ 
        alert("<?php echo $lang['activitymissing'] ?>"); 
        return; 
        } 
       }  

       $.post(
       "calendar/eventsubmit.php<?php echo $qstr ?>", 
       $(this).serialize()); 

       //close current dialog 
       $(this).closest('.ui-dialog-content').dialog('close'); 
       // show OK 

       $("#dialog").load("calendar/actionsuccess.php", function(){ 
         $('#dialog').dialog({ 
         title : 'Success', 
         autoResize : true, 
         width: 'auto', 
         close: function(event, ui) { window.location.href = "calendar.php"; } 
         }) 
        }); 

      }); 
     }); 
    </script> 

感謝, 科恩

+0

你把'$ .post'完成回​​調內部對話結束? – Alnitak

+0

是的,但這也不起作用。我試過hide()並且這個工作。 –

回答

1

如果你把對話框關閉代碼完成回調中:

function(data) { 
    alert("closing"); 
    // .dialog('close') here 
} 

然後this不再指的是形式,它會是什麼情況下jQuery已經提供。

您應該創建原始this的副本,然後指的是:

var form = this; 
... 

$.post(..., function(data) { 
    ... 
    $(form).closest('.ui-dialog-content').dialog('close'); 
}); 
+0

嗨Alnitak,請注意關閉調用超出$ .post調用。但是我會試着在post調用中添加close。 –

+0

這不工作,要麼:( –

+0

也許這事做的事實,該對話框是一個外部PHP頁面?我的外部頁面加載到對話與load()方法。 –

0

你有沒有試過這種

$( 'UI的對話。')隱藏();

+0

嗨卡比蘭,這個作品!仍然很奇怪,關閉不起作用(??) –

+0

雅我也很想知道..暫時使用這個.. –

1

試試這個 它會觸發對話框標題中的關閉按鈕事件。

這是工作對我罰款,關閉對話框

function btnClose() { 
$(".ui-dialog-titlebar-close").trigger('click'); 
}