2017-06-21 72 views
0

我有一個事件:改變事件的proccess之前jQuery的檢查複選框做

$(document).on('change', '.many-checkbox', function() { 
    doSomething() 
}); 

doSomething()是有點重,所以與many-checkbox類複選框將有一個延遲他們實際上正在檢查/取消選中之前。

我想刪除這些延遲。

那麼,我們如何在doSomething()完成之前檢查/取消選中它?

謝謝。

+0

你可以在StackSnippet/JSFiddle中重現這個嗎?看起來問題可能在其他地方。或在'doSomething'中。 – Tushar

+1

順便說一句,'$(this).prop('checked',$(this).prop('checked'));'沒有什麼,但增加了延遲。 – Tushar

+0

我確定問題出在'doSomething',這就是爲什麼我想繞過它。因此,即使在doSomething完成之前,也可以使複選框被手動選中/取消選中。 –

回答

0

您可以使用setTimout函數替換函數doSomething()函數。例如:

$(document).on('change', '.many-checkbox', function() { 
    setTimeout(function(){ 
    // do something 
    }, 100); 
}); 

結果JavaScript執行將暫停以使渲染線程趕上。

+0

爲什麼?它將如何使函數更快地執行? – Tushar

+0

@Tushar,這不會更快。但它會在另一個行動後執行。我很抱歉,但我不記得這個解決方案的來源。 – Alexander

+0

@Tushar,我找到[主題](https://stackoverflow.com/a/779785/7914637),回答你的問題。 – Alexander

0

我懷疑這裏有各種各樣的錯誤,但是你可以先聽聽整個機構內的任何變化,然後過濾到.many-checkbox類。

直接聆聽更改複選框:

$('.many-checkbox').on('change', function() { 
    doSomething(); 
}); 

如果你告訴我們什麼DoSomething的是做,我們也許可以讓它異步的。

+0

對不起,它的方式很難做到異步。正如你所說,它有很多錯誤,我的錯誤代碼〜但非常感謝你的答覆,非常感謝。 –