BlockUI занимает слишком много времени блокировать диалоговое окно jQuery

Из того, что я могу сказать, веб-страница включает файл JavaScript от Google, тогда тот сценарий динамично добавляет изображение к странице ( http://www.google-analytics.com/__utm.gif ), который содержит информацию, запрошенную для входа.

SOP не относится к сценариям, изображениям или файлам CSS, которые динамично добавляются к странице. Поэтому Вы много доверия безотносительно файлов JavaScript, которые Вы включаете в свои веб-страницы, поскольку они будут иметь полный контроль над страницей.

5
задан twh 14 October 2009 в 04:13
поделиться

3 ответа

как указано @Pandincus, вы можете подождать некоторое время, чтобы позволить blockUI завершить свою работу, а затем начать сортировку:

$(function() {
    $("#sort_dlg").dialog({
        autoOpen: false,
        bgiframe: true,
        modal: true,
        buttons: {
            "Cancel": function() { $(this).dialog("close"); },
            "OK": function() {
                $("#sort_dlg").block();
                //WAIT FOR 1 SECOND BEFORE STARTING SORTING
                setTimeout(function(){ doSort()}, 1000);
            }
        }
    });
});
6
ответ дан 18 December 2019 в 10:46
поделиться

Чтобы продолжить мой комментарий выше:

Когда вы вызываете $ .blockUI (), он использует анимацию для постепенного появления блокирующего div, и эти анимации запускаются асинхронно. Следующая строка в вашем коде javascript - это ваша сложная сортировка, и этот код блокирует браузер, пока он не завершится. В результате запущенные анимации не заканчиваются до завершения сортировки!

Плагин BlockUI, похоже, не имеет функции обратного вызова, что досадно, но это нормально - мы можем используйте встроенный в Javascript setTimeout:

<head>
    <title>Test</title>
    <script src="jquery.js"></script>
    <script src="jquery.blockUI.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#btnTest").click(function() {
                $.blockUI();
                setTimeout(doComplicatedStuff, 1000);
            });
        });
        function doComplicatedStuff()
        {
            for(i = 0; i < 100000000; i++)
            {
                // ooh, complicated logic!
            }
            $.unblockUI();
        }
    </script>
</head>
<body>
    <p><input type="button" id="btnTest" value="Test" /></p>
</body>

Хотя это не точная наука, мы в основном предполагаем, что задержка сложного кода на 1 секунду даст BlockUI достаточно времени для отображения оверлея.

Надеюсь, это поможет!

4
ответ дан 18 December 2019 в 10:46
поделиться

Вместо того, чтобы блокировать пользовательский интерфейс, вы должны отключить диалоговое окно с помощью метода disable () в тот момент, когда пользователь нажимает кнопку «перейти». Таким образом, пользователь не сможет ничего щелкнуть, пока процесс завершится.

0
ответ дан 18 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: