2011-04-01 140 views
0

我想在调用$('#dialog')后暂停下面的javascript代码。dialog('open');直到用户响应此对话框。我用while循环,但它停止所有的JavaScript。我只想暂停这个功能。有任何想法吗?如何暂停和恢复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"); 
    } 
} 
}); 
+0

虽然已经太迟了..但是对于新的读者来说..我使用.. window.prompt(“message”,returnvaruable);它会暂停/停止所有的JavaScript在后台,当你点击..好的或从这些提示取消,它会让JavaScript继续。 – MFarooqi 2017-11-07 18:40:25

回答

-1

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

3

如果您希望在等待用户的响应时“暂停”JavaScript的执行,那么您会错误地进行操作。

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

下面的一些伪代码:

页负荷:

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

当对话框OK按钮被点击

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

有趣,这两个upvotes和一个downvote我的..这表明同样的事情! – 2011-12-17 15:16:47

1

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

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

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

您在说的是模式jQuery dialog,在用户可以继续使用任何其他GUI元素之前必须处理该模式。

​​
+0

你能帮助更多它不工作在我身上我会编辑这个问题,并添加我如何创建对话框 – 2011-04-01 10:34:41

+0

它阻止用户界面,但它并没有阻止底层的JavaScript。 – 2011-04-01 10:36:10

+0

@Imre L:这是一件好事。 – 2011-04-01 10:52:46

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 
} 
+0

什么都没有发生;没有显示对话框。那些绑定和解除绑定的是什么?他们能引起问题吗? – 2011-04-01 11:41:02

+0

也许是因为你checkUserLogin()不会返回true或false,而是返回undefined。请参阅http://jsbin.com/ijovo4/edit#preview – 2011-04-01 16:42:08