2012-07-02 62 views
0

在我的代碼中,一個函數在用戶第一次在div上執行鼠標懸停時執行,函數需要30秒完成,在那30秒內如果用戶再次懸停在同一個div上,函數將再次執行,因此我想禁用mouseover事件第二次。是否有任何JavaScript或jQuery代碼來禁用甚至從該div?感謝您的支持,我們將竭誠爲您服務。如何禁用javascript/jquery的mouseover事件?

+0

是有30個第二個功能異步? – Alnitak

+0

哇,沒有看到任何代碼,3人是如何回答這個問題 – Esailija

+0

@Esailija nah,如果你知道你在做什麼,那麼提供一個有根據的猜測是合理的。不幸的是,只有兩個似乎知道他在做什麼......如果「做你的東西」是異步的, – Alnitak

回答

3

你可以在jQuery的一個有趣的功能,看看... .one()這裏是the link

說明:將處理程序爲元素的事件。處理程序每​​個元素最多執行一次。

第二個想法

我可以給你一個想法,假設當鼠標發生過一次了,只想儘快開始你的操作之前取消綁定鼠標懸停事件,然後根據操作已經結束,將它們綁定回來......

+1

非常感謝:) –

+2

@jasminder恕我直言,你接受了錯誤的答案。 – Alnitak

+0

根據你的說法,這將是最好的解決方案? –

3
var isExecuting = false; 

function yourThirtySecFunction() { 
    if (isExecuting == true) return; 
    isExecuting = true; 
    //do your stuff here 

    isExecuting = false; 
} 
+0

將不起作用 – Alnitak

+0

isExecuting = false;可以在異步事物結束時放置,不一定在該函數結束時放置。 – nemo

+0

是的,沒錯。另一點是,如果東西不是同步的,那麼瀏覽器無論如何都不會迴應任何事情。 – Alnitak

10

使用jQuery的關於()和關閉()與某種回調,例如:

$("#myElementID").on('mouseover', myFunction); 

myFunction(e) { 
    var myElement = e.target; 
    myElement.off('mouseover', myFunction); 
    //do something that takes 30 seconds 
    myElement.animate({top: 1000}, 30000, function() { //callback 
     myElement.on('mouseover', myFunction); 
    }); 
} 
+0

+1是正確證明事件處理必須重新啓用的唯一答案_at完成異步回調_ – Alnitak