2010-02-09 41 views
33

如何在我的觸發代碼中知道preventDefault已被調用?jQuery:如何將event.preventDefault()與自定義事件一起使用?

$(document).trigger('customEvent', params); 
if (/* ??? */) 
    doDefaultActions(); 
+1

,如果它是一個自定義事件..有應該不是默認操作。 – 2010-02-09 14:20:58

+1

如果處理程序也用於非自定義事件,它仍然可以用於事件機制。 – 2010-02-09 15:02:29

+0

如果你的自定義事件真的是自定義的,那麼你想要防止什麼?通常使用preventDefault,以便瀏覽器不會執行正常的操作。瀏覽器本身不知道或關心自定義事件。 – 2010-02-09 14:20:10

回答

45

觸發()也可以採取一個事件對象,因此,如果您可以創建一個事件對象,像這樣:

var event = jQuery.Event("customEvent"); 
$(document).trigger(event); 

,那麼你可以檢查後觸發看如果preventDefault()被如此調用:

var prevented = event.isDefaultPrevented(); 
+0

哇,這很酷。每天學點東西! – Pointy 2010-02-09 14:34:52

+3

是的,我今天通過查看jQuery API瞭解到了它。所以我們都學習今天! – 2010-02-09 14:39:19

+0

這似乎沒有記錄(至少在api.jquery.com) - 我無法找到它。文檔現在好一點了,但我仍然希望他們能成爲一個wiki。 [編輯:好吧,我現在看到它的來源!!] – Pointy 2010-02-09 14:44:32

0

據我所知,「的preventDefault()」調用有關防止本機瀏覽器響應之類的文本字段中的錨標記上或按鍵點擊。一旦事件處理週期結束,它就結束了。對於彌補事件,我認爲它沒有任何影響,因爲它全部關於jQuery事件處理系統,而不是關於本地瀏覽器功能。

您的代碼可能會在某處設置某種標誌以便與「外部世界」進行通信。

ooh你可以嘗試讓處理程序在事件對象的某個地方隱藏一個引用,讓外部代碼可以找到它,然後在外部檢查「isDefaultPrevented()」。但我不知道這是否可行。

1

自定義事件沒有發生某些默認操作(它們是自定義的)。

在另一方面,如果你想停止這個事件給他人的冒泡效果,然後看看triggerHandler不冒泡的層次..

相關問題