2013-10-08 36 views
0

我的網頁上有兩個按鈕「a」和「b」,其「onclick」事件綁定了兩個javascript函數「x」和「y」。如何控制javascript函數的執行?

當用戶點擊按鈕「a」時,開始執行「x」,並在執行功能「x」期間讓用戶按下按鈕「b」。
現在我想實現按下「b」按鈕時的邏輯,「x」的執行應該立即停止並且應該開始執行「y」。

是否有可能在JavaScript中做到這一點?如果是,那麼如何?

感謝

+0

太理論了,請提供一些代碼,那麼我們可以幫助 - 換句話說:[你有什麼嘗試?](http://stackoverflow.com/help/on-topic) –

+3

不知道x你在做什麼以及如何殺掉他們。 – epascarello

+0

不,這不是直接可能的,因爲直到你的javascript執行完成纔會處理按鈕點擊。解決方案可能是使用webworkers或使用setTimeout將小功能剪切掉。 –

回答

0

我怕一旦開始,你不能停止的功能,除非它是異步(並且你可以控制它像一個AJAX請求)。

你可以做一個循環的事情,並有一個值是一些取消條件。

0

一般來說,javascript是單線程的,它在執行時阻止用戶界面。因此,當您按下按鈕a並啓動x功能時,您的導航器將不允許您按下按鈕b,直到x完成。

0

有兩個棘手的兩岸問題的方法:

  1. 當用戶點擊按鈕一
  2. 執行X的應立即停止

,第一部分是棘手的,因爲當用戶可以隨時點擊該按鈕,直到執行上下文開始處理該特定事件時,網頁纔會意識到它。由於JS是單線程的,如果你處於函數X的中間,在函數X完成之前你不會得到任何點擊事件。

這個問題可以通過在小塊中分割你的函數來避開,並延遲它們的執行,從而允許執行上下文來處理工作時發生的事件。

function doSomeWork(nextFunction) { 
    // do work 
    setTimeout(nextFunction, 0); // allow event handling, then continue with nextFunction 
} 

關於這種異步編程有很多事情要說,所以我在這裏不再詳述。

乍一看第二個問題比較簡單,有它自己的問題。例如在下面的代碼:

function Y() { 
     X(); 
     Z(); 
    } 

    function X() { 
    // stop execution please! 
    } 

當你停止X的執行(使用收益最有可能的),它只會回落到Y,它會繼續執行,並調用Z.從你的問題好像你想它阻止一切,並開始一個全新的'線程'。

一個可能的解決方案是拋出一個X中沒有捕獲到的錯誤,這個錯誤也會從Y中退出,但是我不得不認爲它是一個醜陋的黑客並且不能支持它。

也許對於您確切問題的更多細節,我們可以提出更簡單/更好的答案。