2013-03-15 96 views
0

我在父頁面上有一個鏈接,它打開一個加載文件的對話框.asp具有包含超鏈接的表單和數據庫結果集。當單擊一個超鏈接(單獨的.js文件中的JavaScript函數)時,它會將一些信息更新到父頁面並嘗試關閉對話框。如何通過點擊鏈接關閉JQuery對話框?

我有兩個問題。
1.當使用$("#myDiv").dialog("close");從一個.js

function UpdateProdInfo() { 
    // some code here to update parent and it works 
$("#myDiv").dialog("close"); } 

裏面提供如何使用關閉功能初始化錯誤。
2.打開第二次對話框時出現問題,仍然會初始化錯誤。

請讓我知道我該怎麼做?由於QF

+0

你可以從控制檯 – 2013-03-15 03:30:45

+0

未被捕獲的錯誤共享完整的錯誤消息:不能調用對話框的方法來初始化之前;試圖調用方法「關閉」 – Ammad 2013-03-19 19:32:53

+0

你怎麼打開對話框 – 2013-03-20 00:27:14

回答

1

的問題是,因爲default2.asp加載爲動態內容到已有的頁面,它不應該有所有的HTML元素,如htmlbodyhead

如果刪除它們,腳本和CSS包括喜歡的jquery.js和jqueryui.css和js它工作正常

演示:Problem
演示:Solution

Defaut2。ASP應該像

This is Default3.asp file 
<br><br> 

Something 
<a href="Javascript:CloseMe();">Close Me</a> 

<br><br> 
<form ID=Form2 > 
    Name: <input type="text" name="Name"><br> 
    Address: <input type="text" name="address"><br><br> 
    <input type="submit" value="Submit"> 
</form>  

<script type="text/javascript"> 
    $(function() { 
    $('#Form2').submit(function(evt) { 
      evt.preventDefault(); 
      $.ajax({ 
       url: "Default2.asp", 
       type: 'POST', 
       data: $(this).serialize(), 
       success: function(result) { 
        $('#mydiv').html(result); 
       } 
      }); 
     }); 

     var MyDlg = $("#mydiv"); 

     $(".ui-widget-overlay").click (function() { 
      MyDlg.dialog("close"); 
     }); 
    }); 

    function CloseMe() { 
     $("#mydiv").dialog("close"); 
    } 

</script> 
+0

感謝Arun,它從你的演示中看到它正在工作,我將編輯我的default2.asp文件,並嘗試並讓你知道。至少這是最接近我的要求的第一個解決方案。再次感謝:) – Ammad 2013-03-20 14:36:23

+0

我檢查了這一點,它在Chrome中工作正常,非常感謝你的這一點。但不幸的是沒有在IE瀏覽器上工作,我的應用程序只適用於IE瀏覽器,這是一個大問題。你能解決這個最後的障礙嗎?自3周以來我一直在努力解決這個問題。 – Ammad 2013-03-20 14:49:19

+0

哪個版本的IE – 2013-03-20 15:15:18

0

嘗試調用

parent.$("#myDiv").dialog("close"); 

,因爲你的對話框父頁面定義。

+1

我不認爲父母會工作,因爲沒有提到一個單獨的框架 – 2013-03-15 03:29:58

+0

出於某種原因,我有一個明顯的印象,對話框顯示在iframe中的「file.asp」。我可能錯了。 – Igor 2013-03-15 03:32:12

0

使用上下文參數:

$("#myDiv",parent.document).dialog("close"); 
+0

沒有工作。 – Ammad 2013-03-19 18:49:51

0

初始化錯誤Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'發生在你試圖關閉尚未打開的對話框。

這可能是要麼

  1. dialog('close')被髮射,它已經打開之前,您可以排除,如果你能看到對話框)或
  2. 的選擇$('#myDiv')沒有得到正確的元素不知何故。

我猜它可能是#2。我會嘗試通過這樣做來調試...

function UpdateProdInfo() { 
    // some code here to update parent and it works 
    console.dir($('#myDiv')); //Does it return the correct element? 
    //$("#myDiv").dialog("close"); 
} 

...看看它是否選擇了正確的元素。

+0

顯示這個,但沒有任何工作,jQuery.fn.jQuery.init [0] 上下文:文件 選擇器:「#myDiv」 __proto__:對象[0] – Ammad 2013-03-19 04:32:33

+0

@qazifarhan是的,這正是我期望看到的。部分'init [0]'告訴我你的選擇器沒有檢索元素。如果是,那將是'init [1]',並且你可以擴展它來查看'0:div#myDiv'屬性。您正在使用的選擇器是'#myDiv',它應該選擇一個類似於'

'的元素。你的div的id屬性看起來是否如此,並且你是否在使用'console.dir($('#myDiv'));'? – 2013-03-19 14:52:10

+0

功能CloseThis(){ 如果($(本)。是( 「的.ui-對話」)){ $( '#mydiv')對話()對話框( 「親密」)。 } }; – Ammad 2013-03-19 19:29:43