2013-03-15 72 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