如何暂停和恢复javascript?

时间:2011-04-01 10:19:38

标签: javascript jquery-ui jquery-ui-dialog

我想在调用$('#dialog')之后暂停下面的javascript代码。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 个答案:

答案 0 :(得分:3)

如果你想在等待用户的回复时“暂停”执行javascript,那么你的方法是错误的。

您应该在用户请求时打开对话框(单击按钮,或在页面加载等)。然后,当用户填写对话框中的信息并提交它时,让它调用另一个javascript操作来处理该数据。

下面的一些伪代码:

页面加载:

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

单击DialogBox OK按钮时

$(".DialogBox input[type=submit]").click(function(){
   // Process the data
});

答案 1 :(得分:1)

而不是暂停,只需在提交对话框信息时调用的函数中包含其余代码:

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

function loginCode() {
    // everything after resume javascript comment
}

答案 2 :(得分:0)

使用事件可能是要走的路。

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
}

答案 3 :(得分:-1)

警告(“按OK继续”); ?

答案 4 :(得分:-1)

您正在谈论模态 jQuery dialog,必须在用户继续使用任何其他GUI元素之前处理。

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

$('#dialog').dialog('open');