2011-04-02 65 views
1

我試圖在功能啓動時隱藏一個按鈕&顯示一些文本&然後隱藏文本&當函數完成時重新顯示按鈕。獲取JavaScript命令在函數完成之前運行?

由於JavaScript的工作方式,我很難做到這一點,因爲它不會向屏幕輸出任何東西,直到整個函數完成;因此我試圖做的是不工作。

我試着在「onclick」命令上使用兩種不同的功能,但是這產生了相同的結果。

任何人都可以擁有更多的JavaScript知識,請告訴我如何實現我在這裏要做的事情?

編輯:嘗試了以下建議代碼:

function addCatsSIC2() { 

    var addBtnWrapper = document.getElementById('addBtnWrapper'); 
    var addWait = document.getElementById('addWait');  

    addBtnWrapper.style.display = 'none'; 
    addWait.style.display = 'block';  

    setTimeout(function(){ 
     addCatsSIC(); 
    }, 10); 

    addWait.style.display = 'none'; 
    addBtnWrapper.style.display = 'block';  

} 

沒有工作。唯一不同的是,我點擊的按鈕沒有「保持按下」,直到功能完成。

+0

你在做什麼功能? – amosrivera 2011-04-02 21:12:20

+0

這取決於 - jQuery確實有一個'delay()'函數。 – pimvdb 2011-04-02 21:12:39

回答

4

試試這個

// disable the button 
setTimeout(function(){ 
    // do your actions 
    // re-enable the button 
}, 10); 

這應該給行動的機會來完成,DOM操作將生效,然後超時功能將被執行。 JS沒有線程,但這可能會達到類似的效果。

+0

Plz檢查我的編輯...沒有工作:( – Brett 2011-04-02 21:43:08

+0

我的壞..放在resao代碼在錯誤的地方。 – Brett 2011-04-02 22:08:26

+0

很高興幫助。祝你好運與你的應用 – 2011-04-02 23:11:27

2

考慮使用setTimout(func, 10)來運行函數的主要部分 - 這樣UI更新將在主代碼運行之前發生。

+0

Plz檢查我的編輯...沒有工作: ( – Brett 2011-04-02 21:43:42

+0

我的壞..把reshow代碼放在錯誤的地方 – Brett 2011-04-02 22:08:57

1

你必須補充的是,用戶界面更改爲定時器功能的線路:

window.setTimeout(function(){ 
    addCatsSIC(); 
    addWait.style.display = 'none'; 
    addBtnWrapper.style.display = 'block'; 
}, 10); 

否則它將讓您的addCatsSIC功能之前執行。

+0

Woops ..我的壞,我沒有足夠的重視我在哪裏放置了按鈕的重新顯示謝謝! – Brett 2011-04-02 22:07:51

+0

歡呼@佈雷特請接受吉姆或阿列克謝的答案他們給出了正確的想法,我只是輕輕一推。:) – 2011-04-02 22:10:09

相關問題