2013-01-20 170 views
0

我有2個Razor視圖,其中一個正在加載另一個jQuery UI對話框。在對話框中加載的視圖中;我打開另一個jQuery UI對話框來顯示一條消息。jQuery UI:模型對話框'關閉'

目標是在消息對話框Cancel單擊按鈕時關閉兩個對話框。

剃刀代碼如下:

主視圖

<button id="openModel" onclick="openModel()"> 

<div id="mainDialog" /> 

<script type="text/javascript"> 
    function openModel() { 
     $('#mainDialog').dialog({ 
      open: function() { 
       // loading "the secondary view in the model dialog" 
       // url: controller-action url to load the second view 
       $(this).load('url'); 
      } 
     }); 
    } 
</script> 

對話框查看

<button id="messageOpener">Verify</button> 

<div id="messageDialog" /> 

<script type="text/javascript"> 

    $(document).ready(function() { 

     $("#messageOpener").click(function() { 
      $("#messageDialog").dialog("open"); 
       return false; 
     }); 

     $("#messageDialog").dialog({ 
      buttons: { 
       Retry: function() { 
        $(this).dialog("close"); 
       }, 
       Cancel: function() { 
        // **** ?? must close both dialogs. **** 
       }     
      }, 
      autoOpen: false, 
     }); 
    }); 

</script> 

我曾嘗試以下方法關閉對話框:

方法01:

$(".ui-dialog-content").dialog("close"); 

方法02:

$(this).dialog("close"); 
$("#mainDialog").dialog("close"); 

方法03:

$(".ui-dialog:visible").find(".dialog").dialog("close"); 

但是,所有上述不關閉對話框的預期,而不是產生以下JS錯誤:

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'
v.extend.error
(anonymous function)
v.extend.each
v.fn.v.each
e.fn.(anonymous function)
$.dialog.buttons.Cancel
r.click
v.event.dispatch
o.handle.u

+1

會發生什麼時你把'$(「#mainDialog」)。對話框(「關閉」);'當消息對話框關閉?方法2看起來不錯,但 – Vimalnath

+0

有關於此的任何更新? – Vimalnath

+0

@vimalnath,謝謝。是的,'$(「#mainDialog」)。dialog(「close」);'關閉** messageDialog **而不是** mainDialog **也會給出相同的錯誤。 – dan

回答

1

重新編寫以下列方式代碼解決問題..

1,主要查看

<button id="openModel" onclick="openModel()"> 

<div id="mainDialog" /> 

<script type="text/javascript"> 

    var $modelDialog = $('#mainDialog').dialog({ 
     autoOpen: false, 
     open: function() { 
      // loading "the secondary view in the model dialog" 
      // url: controller-action url to load the second view 
      $(this).load('url'); 
     } 
    }); 

    function openModel() { 
     $modelDialog.dialog('open');  
    } 

    function closeModel() { 
     $modelDialog.dialog('close');  
    } 

</script> 

2.對話框查看

<button id="messageOpener">Verify</button> 

<div id="messageDialog" /> 

<script type="text/javascript"> 

    var $messageDialog; 

    $(document).ready(function() { 

     $("#messageOpener").click(function() { 
      $messageDialog.dialog("open"); 
       return false; 
     }); 

     $messageDialog = $("#messageDialog").dialog({ 
      buttons: { 
       Retry: function() { 
        $messageDialog.dialog("close"); 
       }, 
       Cancel: function() { 
        // [!!] 
        $messageDialog.dialog("destroy"); 
        closeModel(); 
       }     
      }, 
      autoOpen: false, 
     }); 
    }); 

</script> 
0

方法2看起來不錯,但是當您嘗試關閉message對話框時,得到該錯誤會導致mainDialog模式未打開。此外,函數openModel不會被調用到任何地方。

+0

謝謝。但是'openModel()'函數在'