Диалог jQuery открывается, но не закрывается! - PullRequest
2 голосов
/ 23 июня 2010

Я делаю Ajax GET для некоторого HTML, который затем заполняет div с помощью:

$(theDiv).html(theHtml)

Этот HTML включает в себя кнопку (скажем, «Button A»), которая отображает диалог jQuery через:

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

При нажатии кнопки «A» диалоговое окно отображается каждый раз.Однако внутри диалога я включил ссылку «Отмена».Ссылка отмены срабатывает:

$(selector).dialog("close")

Я заметил, что большую часть времени она работает просто замечательно.Однако, если я быстро нажму кнопку «A» сразу после завершения Ajax GET, ссылка отмены НЕ закроет диалоговое окно!Кнопка «X» в правом верхнем углу диалогового окна всегда работает, но я борюсь с кнопкой «Отмена».

Я пробовал несколько разных вещей, чтобы заставить это работать безпомогло.Это происходит в Firefox 3.5.9, а также в IE 7. Если я использую Firebug и ставлю точку останова после оператора .dialog('close');, то я замечаю, что цвет фона на экране меняется с серого на белый, но диалоговое окно остается открытым,Я даже пытался решить проблему, выполнив:

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

безрезультатно.

По какой-то причине, при первом запуске Ajax GET у меня НИКОГДА не возникало этой проблемы ..Поэтому, когда я захожу на страницу и выполняю GET в первый раз, она работает каждый раз.Однако, если я остаюсь на странице и продолжаю запускать GET, пока DOM все еще загружен, это работает, может быть, только в 50% случаев.

Я очень ценю любую помощь, которую кто-либо готов предоставить!

Спасибо,

Энди

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Вы пытались создать диалоговое окно заранее с помощью кнопки отмены, а затем с помощью команды открытия на кнопке A:

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

Затем внутри вашего нажатия даже на кнопку A:

$(selector).dialog('open');
0 голосов
/ 03 сентября 2011

Похоже, что JavaScript не готов в тот момент, когда вы нажимаете кнопку «Отмена».Вы должны попытаться сделать оповещение о событии document.ready на странице, загруженной ajax, если вы можете нажать кнопку «Отмена» до того, как приходит оповещение, javascript просто медленнее, чем вы.вот так:

<script type="text/javascript">
$(function() {
    alert('Javascript ready');
});
</script>
...