2011-04-01 137 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