2012-07-12 84 views
0

我有一个jQuery UI的对话框:jQuery UI的对话框不会打开Internet Explorer中

$("#dialog").dialog({ 
    modal: true, 
    closeOnEscape: false, 
    resizable: false, 
    autoOpen: false, 
    open: function() { 
     $(".ui-dialog-titlebar").hide(); 
    } 
}); 

我想只是一个AJAX调用之前打开此对话框。它使用Firefox,但IE浏览器无法打开,除非在打开对话框后输入alert。任何人都可以告诉我可能会有什么问题吗?我使用下面的代码:

$("button").click(function() { 
    $("#dialog").dialog('open'); 
    //alert('test'); //if I put this alert, the dialog will open 
    $.ajax({ 
     type: "POST", 
     url: "testing.txt", 
     async: false, 
     dataType: "text", 
     success: function(returnText) { 
      $("#dialog").dialog('close'); 
      $("#textarea").text(returnText); 
     }, 
     error: function() { 
      $("#dialog").dialog('close'); 
     } 
    }); 
}); 

回答

4

open事件由于潜在的动画异步完成,因此,什么是可能发生的是,由于IE的缓慢的JavaScript解释,代码以关闭对话框中的successerror回调(它们也是异步的)正在执行的足够接近open,你没有注意到对话框被打开。我会猜测你的AJAX呼叫正在很快完成。

解决此问题的一种方法是将您的AJAX呼叫置于setTimeout区块中。

$("button").click(function() { 
    $("#dialog").dialog('open'); 

    setTimeout(function() { 
     $.ajax({ 
      type: "POST", 
      url: "testing.txt", 
      async: false, 
      dataType: "text", 
      success: function(returnText) { 
       $("#dialog").dialog('close'); 
       $("#textarea").text(returnText); 
      }, 
      error: function() { 
       $("#dialog").dialog('close'); 
      } 
     }); 
    }, 1); 
}); 

这只是排队的$.ajax调用,它将使open事件的完成。约翰Resig有一个很好的写在为什么这种事情在这里工作 - http://ejohn.org/blog/how-javascript-timers-work/

+0

谢谢,这解决了我的问题! 我也在我的弹出窗口中有一个GIF动画,但它不起作用。你知道这个问题可能会是什么吗? – user1135357 2012-07-12 11:05:52

+0

没有理由不应该工作。你可以看看Chrome的开发工具中的网络标签或Firebug中的网络标签,看看图像是否被请求并正确返回?这可能是一个图像需要预取的问题,您可以通过调用'new Image('path/to/myImage.png');'在JavaScript的早期某处进行预取。 – 2012-07-13 01:03:18

1

解决此问题的另一种方法是将“dialog.open”部分放在mousedown事件中而不是单击。这样,你仍然可以做IE IE(8)不喜欢的东西,当你把它放在setTimeout中,就像下载一个文件一样。