Как приостановить и возобновить JavaScript? - PullRequest
0 голосов
/ 01 апреля 2011

Я хочу приостановить приведенный ниже код JavaScript после вызова $ ('# dialog'). Dialog ('open'); и пока пользователь не ответит на это диалоговое окно. Я использовал цикл while, но он останавливает весь JavaScript. Я просто хочу приостановить эту функцию. Есть идеи?

Примечание: я не хочу разбивать свой код на две функции. Я просто хочу приостановить JavaScript, пока пользователь не введет некоторые значения, такие как приглашение

function sendSubComment(button){
form = button.parentNode
nodes= form.elements;
cmt = $(nodes.item(0)).val();
cmt = cmt.replace(/\n/g,"<br>");
title = $(nodes.item(1)).val();
for(i=0;i < nodes.length;i++){
    nodes.item(i).disabled = 'true';
}
c = form.parentNode.parentNode;
if(checkUserLogin() == false){
    $('#dialog').dialog('open');
     //pause starts here
     //return the values of user
     //resume javascript
}
document.title = c.id;
$.post('index/phplibrary/action.php',{cmd:'insert_comment',cmt:cmt,title:title,id_topic:<?php echo $GLOBALS['id_topic']; ?>,id_parentComment:c.id,subcomment:'1'},function(result){
        $.post('ajax/comments.php?cmd=get_subcomment&id_subcomment='+result,function(res){
                extendMakeComment(form);

                node = c.childNodes[3];
                document.title = node.className;
                t = document.createElement("DIV");
                t.innerHTML = res;
                t = t.childNodes[0];
                $(t).hide();        
                node.appendChild(t);
                $(t).show("slow");
                form.reset();
                for(i=0;i < nodes.length;i++){
                    nodes.item(i).disabled = '';
                }
            });

    });

}

этот код - то, как я создаю диалоговое окно

$('#dialog').dialog({
autoOpen: false,
width: 600,
buttons: {
    "Ok": function() { 
        $(this).dialog("close"); 
    }, 
    "Cancel": function() { 
        $(this).dialog("close"); 
    } 
}
});

Ответы [ 5 ]

3 голосов
/ 01 апреля 2011

Вы делаете это неправильно, если хотите «приостановить» выполнение JavaScript, пока вы ждете ответа от пользователя.

Вы должны открыть диалоговое окно, когда пользователь запрашивает его (Нажатие кнопки или при загрузке страницы и т. Д.).Затем, когда пользователь заполняет информацию в диалоговом окне и отправляет ее, он должен вызвать другое действие javascript для обработки этих данных.

Ниже приведен код псевдо-кода:

Загрузка страницы:

$(".DialogBox").show();

Когда нажата кнопка DialogBox OK

$(".DialogBox input[type=submit]").click(function(){
   // Process the data
});
1 голос
/ 01 апреля 2011

Вместо приостановки, просто поместите оставшуюся часть кода в функцию, которую вы вызываете, когда передается информация диалога:

if(checkUserLogin() == false){
    $('#dialog').dialog('open');
    $('#dialog').find('.classOfSubmitButton').click(function(e){
      loginCode();
    }
} else {
    loginCode();
}

function loginCode() {
    // everything after resume javascript comment
}
0 голосов
/ 01 апреля 2011

Использование событий, вероятно, лучший способ.

function sendSubComment(button){
  if(checkUserLogin() == false){
    $( "#dialog" ).bind( "dialogclose", function(event, ui) {
      if(checkUserLogin() == true) //this check is needed to eliminate dead loop
         sendSubComment(button); //call again
      $( "#dialog" ).unbind(event, ui);
    }).dialog('open');
    return; //not going further
  }
  //do the other stuffs
}
0 голосов
/ 01 апреля 2011

Вы говорите о модальном jQuery диалоге , с которым необходимо разобраться, прежде чем пользователь сможет продолжить работу с любыми другими элементами графического интерфейса.

$('#dialog').dialog("option", "modal", true);
// ^ it would be best to set this when you
// _create_ the dialog, but this works too

$('#dialog').dialog('open');
0 голосов
/ 01 апреля 2011

оповещение («Нажмите ОК для продолжения»);

...