![](/img/trans.png)
[英]How to prevent other click events from running while one of them is already running in jQuery?
[英]How do I unbind or prevent other click events from occurring while my function is running?
我有一個旋轉木馬設置,我點擊事件綁定到導航箭頭。 單擊它們時,我使用jQuery動畫在下一個輪播幻燈片的元素中進行動畫處理,由於動畫的性質,我使用setTimeout()
幾次。
我有一個錯誤,如果我單擊一個箭頭,然后快速單擊上一個或下一個箭頭,動畫將因為超時(這個項目中必需的)而混淆,並且在屏幕上不呈現任何內容。 我已經看了一段時間了,我認為最好的方法可能是防止其他箭頭在當前動畫完成之前被點擊。
每個箭頭都是通過click
而不是on:('click', function() ...
等控制的:
$("#arrow1").click(function() {...}
我看了看
$("element").off("click");
但由於他們沒有使用'on'方法附加,我認為這不會起作用。
我想要的東西:
$("#arrow1").click(function() {
$("#arrow2, #arrow3, #arrow4").off("click");
// do my animations, then
$("#arrow2, #arrow3, #arrow4").on("click");
}
但我還沒有能夠讓它工作。
.off
和.on
你期望不工作。 的.click
方法和其他事件方法使用.on
幕后方法結合的處理程序。 在沒有任何特定處理程序的情況下調用.off
方法時,它會刪除 (而不是臨時禁用)特定事件的所有綁定處理程序。 並且.on
不傳遞處理程序的情況下調用.on
無效。
在您的情況下,您可以使用標志而不是操縱事件處理程序,這也比(重新)綁定和刪除事件處理程序更有效。
你可以使用unbind函數
$("#arrow1").click(function() {
// $("#arrow2, #arrow3, #arrow4").off("click");
$("#arrow2, #arrow3, #arrow4").unbind("click");
// do my animations, then
$("#arrow2, #arrow3, #arrow4").on("click");
}
我要做的是從頭開始設置一個布爾值isLoading = false。 然后在函數執行時設置:
isLoading = true。 如果isLoading == true,$('button')。attr('disabled','disabled'); 否則啟用它
完成后,將其更改回false。
對不起,這是psudo代碼,它只是我的頭腦。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.