我有一个jQuery UI对话框:
$("#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');
}
});
});
答案 0 :(得分:4)
由于潜在的动画,open
事件异步完成,因此可能发生的是由于IE的JavaScript解释速度缓慢,关闭success
或error
对话框的代码回调(也是异步的)正在执行足够接近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
事件完成。 John Resig很好地写了为什么这类事情在这里起作用 - http://ejohn.org/blog/how-javascript-timers-work/。
答案 1 :(得分:1)
解决此问题的另一种方法是将“dialog.open”部分放在mousedown事件中而不是单击。这样你仍然可以做IE(8)在将它放入setTimeout时不喜欢的东西,比如下载文件。