2011-11-18 24 views
0

我需要暫停中間的JavaScript函數執行,然後在單擊表格單元格後繼續執行。例如:我必須將「A」放入一個表格單元格中。所以,我必須點擊add()(add()是一個函數),然後等待用戶單擊表格單元格以傳遞單元格ID來運行。我曾想過爲每個單元綁定一個單擊事件來觸發add()函數。但是我必須做一個刪除功能。同樣,我點擊刪除按鈕,然後等待用戶單擊表格單元以將單元ID傳遞給函數。有沒有什麼方法可以在javascript中等待輸入的時候暫停一個函數呢?

那麼如何暫停函數來等待輸入,就像C++:cin >> x程序一直等待直到用戶輸入x的值。

被修改: 最後我解決了它。每次當我點擊添加按鈕時,我都會爲每個td綁定一個addtd函數。在單擊單元格後,我解除了addtd函數的綁定。所以下次我點擊刪除按鈕時,我可以在每個單元格上綁定一個deltd函數。

+1

你想從用戶那裏獲得輸入嗎?提示可能會這樣做,它會提示用戶並等待用戶提供答案。 –

+0

「隊列」的狀態改變數據,所以'currentValueToAdd =「A」;'然後讀取並在點擊處理程序中採取行動? –

+0

[Javascript - 繼續前等待事件]的可能重複(http://stackoverflow.com/questions/963507/javascript-waiting-for-event-before-proceeding) – JJJ

回答

1

我完全不明白這個問題。您不能暫停執行(不阻止整個瀏覽器)。您只能在完成工作的地方設置事件偵聽器。

您可以設置click事件委派,以避免將事件偵聽器綁定到每個單元格。

var textToAdd = 'A'; 

table.addEventListener('click', function (e) { 
    var td = e.target; 
    while (td !== this && td.tagName !== 'TD') { td = td.parentNode; } 
    if (td.tagName !== 'TD') return; 

    td.innerHTML += textToAdd; 
}); 
1

無法按照您描述的方式暫停功能。你有沒有想過這樣做呢?也就是說,當用戶點擊一個單元格時,可以用某種方式突出顯示它,然後添加和刪除按鈕/功能將應用於當前突出顯示的單元格。

或者,您可以添加或刪除「預處理」,然後設置某種標誌以表明您正在等待輸入,然後爲單元格單擊事件設置事件處理程序,以檢查該標誌以決定什麼處理接下來。所以,假設你已經設置你的添加和刪除事件處理程序調用add()delete(),並設置表格單元格單擊處理程序調用cellClick(),你可以嘗試這樣的事:

var clickCallback = null; 

function add() { 
    // do your preprocessing here 
    clickCallback = function(clickedCell) { 
     // do further processing here 
    }; 
} 

function delete() { 
    // do your delete preprocessing here 
    clickCallback = function(clickedCell) { 
     // do further processing here 
    }; 
} 

function cellClick(e) { 
    e = e || window.event; 
    var clickedElement = e.srcElement || e.target; 
    if (clickCallback != null) { 
     clickCallback(clickedElement); 
     clickCallback = null; 
    } 
} 

處理後,單擊回調設置回null,以便多次點擊不做任何事情。很明顯,如果用戶採取的其他操作應該取消處理的其餘部分,那麼只需將回調設置爲null即可。

注意,通過直接定義add()delete()函數中的回調,他們(回調),將有機會獲得的add()delete()局部變量,即使回調直到後來執行(閉包的魔法)。

相關問題