2013-03-27 51 views
1

我想更好地瞭解jQueryUI插件的事件,如http://api.jqueryui.com/autocomplete/瞭解jQueryUI事件

例如,我有select(event,ui)事件。根據文檔,看起來兩位代碼是相同的。正確?

$(".selector").autocomplete({ 
    select: function(event, ui) {} 
}); 

(".selector").on("autocompleteselect", function(event, ui) {}); 

好吧,我想都將「autocompleteselect」事件的事件處理函數附加到所選元素。該文檔還將「選擇」事件的「類型」顯示爲「自動完成選擇」。但我認爲活動名稱是「選擇」。它是「選擇」還是「自動完成選擇」?請注意,我第一次嘗試通過jQueryUI源代碼,但是字符串「autocompleteselect」從不使用。 「autocompleteselect」在哪裏定義?

我的下一個混亂之處是當我把代碼放入與事件相關的匿名函數中時。此代碼是否總是首先執行,然後是任何與even執行相關的默認插件代碼?請問event.preventDefault();也會阻止默認行爲?

+1

本身被命名爲「autocompleteselect」事件的事件 - 它是什麼你正在通過'開'。傳遞給Autocomplete插件的構造函數的項目用於初始化事物。 'select'選項是指定自動完成插件手動激發的'autocompleteselect'事件要執行的操作的方式。稍後使用'on'是動態地將處理程序綁定到該事件的一種方法。 – Ian 2013-03-27 13:50:17

+0

啊,我想這是有道理的,「選擇」是一個選項,指定的功能,而不是一個事件。謝謝 – user1032531 2013-03-27 13:54:55

+0

是的,事件名稱與小部件選項無關,但有一個約定(正如Arun P Johny的答案中指出的那樣)。僅僅因爲這個選項被稱爲'select'並不意味着這是事件的名稱或任何相關的事情。使用'select'選項,小部件觸發的事件可以稱爲'itemchange' ...並且您要處理的事件將是'autocompleteitemchange'。但現在我們知道,事情正在變得更加匹配(可能是因爲它有意義而且更容易)。該選項被稱爲'select',被觸發的事件是'select'(內部),並且您偵聽'autocompleteselect'。 – Ian 2013-03-27 14:05:19

回答

-2

這兩件事情是不是真的一樣。他們只是做同樣的事情;-)好吧,差不多。

首先,我需要解釋一點理論: 通常,在處理「異步」代碼時,您有兩個選擇:回調和事件監聽器。 回調是一個函數,在系統完成其他一些動作後調用。通常情況下,您配置對象或運行一個函數,並在發生事情時「啓動」回調以啓動。 當事件發生時,系統調用事件監聽器。通常,您將一堆事件偵聽器綁定到事件,而其他代碼部分可能會觸發事件,從而觸發所有偵聽器功能。

當你不習慣於事件和回調時,你可能看不到差異。只要知道使用回調導致像代碼一樣緊湊的「意大利麪條」,另一方面使用監聽器會導致靈活但難以閱讀的代碼。我相信最好的方法是將兩者結合起來以獲得最可讀的代碼。

在你的特殊情況下,「select」是配置對象的一個​​屬性,它指定了一個回調函數。

「autocompleteselect」是事件的名稱 - 你可以添加偵聽該事件

$('.selector').on('autocompleteselect', doSomething); 

或觸發自己

$('.selector').trigger('autocompleteselect'); 
3

這是一個由Widget工廠添加的功能。當使用_trigger觸發事件時,它實際上將觸發類型爲widget name + type的事件。例如:如果您要創建一個名爲mywidget的小部件,並且在小部件(如this._trigger('select'))中觸發了一個事件,則實際發生的事件將爲mywidgetselect

所以如果你看autocomplete源代碼,你會發現this._trigger("select", ...)被用在那裏。

您也可以參考this blog的一些細節

+0

謝謝。回顧我們的發言。 – user1032531 2013-03-27 13:58:21