2

我正在为一些 HTML 做一个 Ajax GET,然后通过以下方式填充一个 div:

$(theDiv).html(theHtml)

这个 HTML 包含一个按钮(比如说“按钮 A”),它通过以下方式显示一个 jQuery 对话框:

$(selector).dialog({modal:true});

单击“按钮 A”时,每次都会显示对话框。但是,在对话框中,我包含了一个取消链接。取消链接触发:

$(selector).dialog("close")

我注意到大多数时候它都很好用。但是,如果我在 Ajax GET 完成后立即快速单击“按钮 A”,取消链接将不会关闭对话框!对话框右上角的“X”按钮始终有效,但“取消”按钮是我正在努力解决的问题。

我已经尝试了许多不同的方法来让这个工作无济于事。这发生在 Firefox 3.5.9 和 IE 7 中。如果我使用 Firebug 并在语句后放置断点.dialog('close');,那么我注意到屏幕上的背景颜色从灰色变为白色,但对话框仍然打开。我什至尝试通过执行以下操作来强制解决问题:

$(selector).css("display", "none"); 

无济于事。

无论出于何种原因,Ajax GET 第一次触发时,我从来没有遇到过这个问题......所以当我第一次访问页面并执行 GET 时,它每次都有效。但是,如果我留在页面上并在 DOM 仍在加载时继续触发 GET,它可能只有 50% 的时间有效。

我非常感谢任何人愿意提供的帮助!

谢谢,

安迪

4

2 回答 2

0

在您单击“取消”按钮时,看起来 javascript 还没有准备好。您应该尝试在 ajax 加载页面的 document.ready 事件上弹出警报,如果您能够在警报到来之前单击取消按钮,则 javascript 比您慢。

只需添加类似的内容:

<script type="text/javascript">
$(function() {
    alert('Javascript ready');
});
</script>
于 2011-09-03T03:20:39.037 回答
0

您是否尝试过使用取消按钮提前创建对话框,然后使用按钮 A 上的打开命令:

<script>
    $(document).ready(function () {
        $(selector).dialog({
            modal: true,
            autoOpen: false,
            buttons: { 'Cancel': function () { $(this).dialog('close'); } }
        });
    });
</script>

然后在您的点击中,甚至在按钮 A 上:

$(selector).dialog('open');
于 2011-09-03T03:32:28.573 回答