Показывать "Пожалуйста, подождите" модально во время работы функции - PullRequest
0 голосов
/ 14 июля 2010

Я пытаюсь добавить модальное диалоговое окно jQuery UI, чтобы показать, когда запускается функция, которая говорит «Пожалуйста, подождите».Затем закройте его, когда функция будет завершена.Я пробовал следующее:

function flashFallback(){
  $('#dialog').dialog({
    modal:true,
    autoOpen:false
  });
  $("#dialog").dialog("open");

  /* Other code goes here... 

  */

  $('#dialog').dialog("destroy");
}

Я знаю, что функция работает успешно, но диалог никогда не закрывается.Я также попытался «закрыть» вместо «уничтожить» без удачи.Справка!

ОБНОВЛЕНИЕ: Вот полная функция:

function flashFallback(){
    $('#dialog').dialog({
        modal:true,
        autoOpen:false
    });
    $("#dialog").dialog("open");

    var el = "";
    var vidFileName = "";
    var posterPath = "";
    var videoTag = "";
    var boxId = "";
    var so = "";
    var flashId = "";
    var flashVars = "";
    var params = "";
    var attributes = "";
    var anchorId = "";
    var dotPosition = "";

    $("[id^='vid-']").each(function(){
        el = "";
        vidFileName = "";
        posterPath = "";
        videoTag = "";
        flashId = "";
        flashVars = "";
        params = "";
        attributes = "";
        anchorId = "";

        el = $(this);

        boxId = this.id + "_flashBox";
        flashId = this.id + "_flashPlayer";
        anchorId = this.id + "_anchor";

        el.parent().parent().find("div:first").attr("id",boxId);

        el.parent().find("source").each(function(){
            if ($(this).attr("src").indexOf("m4v") != -1 || 
                $(this).attr("src").indexOf("mp4") != -1){
                vidFileName = $(this).attr("src").substring($(this).attr("src").lastIndexOf("/")+1);
            }
        });

        /*
            IE uses the Flash player, which overlays a 'Play' button
            on the poster image by default; so we use a poster image
            that doesn't have a play button. Otherwise we'd end up 
            with a play button on top of a play button.
        */

        dotPosition = el.parent().find("img").attr("src").lastIndexOf(".");
        posterPath = el.parent().find("img").attr("src").substring(0,dotPosition) + "-ie" + el.parent().find("img").attr("src").substring(dotPosition);

        el = $("[id="+boxId+"]");
        el.empty();
        el.append("<a id='" + anchorId +"'></a>");

        flashvars =
        {
            file:                 vidFileName,
            autostart:            'false',
            image:            posterPath
        };

        params =
        {
            allowfullscreen:      'true', 
            allowscriptaccess:    'always',
            wmode:            'opaque',

        };

        attributes =
        {
            id:                   flashId, 
            name:                 flashId
        };

        swfobject.embedSWF('global/vid/player-licensed.swf', anchorId, '372', '209', '9.0.124', 'global/js/swfobject/expressInstall.swf', flashvars, params, attributes);

    });
     $('#dialog').dialog("destroy");

}

Ответы [ 2 ]

4 голосов
/ 14 июля 2010

Javascript является однопоточным, поэтому функция запускается последовательно. Он открывает диалоговое окно (но пока не обновляет страницу), затем запускает ваш код, а затем закрывает диалоговое окно перед перерисовкой веб-страницы.

Что вам нужно сделать, это открыть диалоговое окно и запустить функцию асинхронно, а когда вы закончите, вы хотите закрыть диалоговое окно.

1 голос
/ 14 июля 2010

Я не уверен, что ваша функция должна делать или почему это займет достаточно много времени, чтобы потребовался модал «Please Wait», поэтому я собираюсь принять его какой-то запрос (AJAX, загрузка изображений и т. Д.).

Если это так, уничтожение должно быть внутри части обратного вызова вашей функции.

...