2012-12-28 85 views
5

在我的代碼中,設置了一個元素的事件處理程序,它將該元素的css高度更改爲100px。在其他地方,我想要在某些條件滿足時運行不同的事件處理程序,它應該覆蓋之前的事件處理程序並將其高度更改爲200px。如何覆蓋以前設置的jQuery事件處理程序?

有沒有辦法做到這一點,或清除一個元素的所有以前設置的事件處理程序?

+0

你可以檢查事件處理程序中的條件,不是嗎? –

回答

13

是,只要使用.off(),像

$('selector').off('eventname') 
3

這是一個黑客位,但它聽起來就像你試圖破解別人的代碼沒有能力直接改變它,這樣可能是你必須訴諸的。

如果你只需要他們的document.ready()後打電話到的東西,你不控制document.ready()語句的順序,那麼你可以把一些代碼在很短的超時這樣您的document.ready處理程序中:

$(document).ready(function() { 
    setTimeout(function() { 
     $('selector').off('eventname').on(your event handler here); 
    }, 1); 
}); 

setTimeout()將在所有document.ready()處理程序都運行後運行。

+0

是否有任何代碼檢查是否爲給定元素設置了任何事件?所以我可以這樣做:'if($(ele).hasHandler('click'))/ * clear event/* else setTimeout(this,1000);',確保事件在我的函數調用之前被設置 –

+0

@ClickUpvote - 沒有必要先檢查。只要刪除以前應用的處理程序,然後附上自己的。如果沒有,移除將無能爲力。僅供參考,這隻適用於jQuery應用的事件處理程序,而不是純粹的JavaScript應用程序處理程序。 – jfriend00

+0

沒錯,但是如果我可以在移除之前檢查,那會更可靠地工作,例如檢查是否設置了事件,如果是,則刪除並設置新的,如果不是,則在1秒後再次檢查,重複 –

相關問題