2010-05-24 75 views
4

我不確定這是否可行,但我希望能夠將jQuery UI事件設置爲一個函數(直接),而不是繼續包裝其他function(event, ui) { ... }包裝。JavaScript函數傳遞?

希望你能從下面的例子中看到我要做什麼。

這裏是我想什麼:

$("#auto").autocomplete({ 
    source: "somepage.php", 
    select: dropdownSelect, 
    minLength: 0 
}); 

現在我會認爲上面會工作,因爲我只是想說「繼續激發此事件,剛剛超過該功能」。 不幸的是,這是行不通的,而我結束了這一點:(出於某種原因,從所有數據斷開連接)

$("#auto").autocomplete({ 
    source: "somepage.php", 
    select: function(event, ui) { dropdownSelect(event, ui) }, 
    minLength: 0 
}); 

感謝很多提前。

+2

我可以向你保證,有在你給出的兩個例子沒有區別。 – 2010-05-24 20:31:48

+0

@Sean:在嘗試獲取一些東西(比如讓封裝過的函數進行)之後,我已經完成了它的工作。我不知道爲什麼它以前不工作(因爲之前是**許多修訂版本),但必須有一些差異,不過因爲現在包裝的版本會丟失'$(this)'。 – Lance 2010-05-24 20:39:26

+1

您可能想要檢查出[this](http://stackoverflow.com/questions/1007340/javascript-function-aliasing-doesnt-seem-to-work),[this](http://stackoverflow.com/questions/2656469/assigning -document-getelementbyid-to-another-function /)和[this](http://stackoverflow.com/questions/2662851/javascript-is-it-posible-for-one-member-of-an-object-to -access-another-member-of) – 2010-05-24 20:44:39

回答

4

下面的兩個例子理論上應該都工作:

var dropdownSelect = function(event, ui) { 
    // Code to select drop down 
}; 

$("#auto").autocomplete({ 
    source: "somepage.php", 
    select: dropdownSelect, 
    minLength: 0 
}); 

而且這樣的:

function dropdownSelect(event, ui) { 
    // Code to select drop down 
}; 

$("#auto").autocomplete({ 
    source: "somepage.php", 
    select: function(event, ui) { dropdownSelect(event, ui) }, 
    minLength: 0 
}); 

JavaScript函數是一等公民,這意味着你可以像對待其他任何對象。

+0

不是這樣,第一個例子是一個自動執行的'FunctionExpression',它將導致整個堆棧發生錯誤 – 2010-05-24 20:26:57

+0

@Sean:修復了錯誤。 – 2010-05-24 20:28:11

0

知道爲什麼不先定義一個函數:

var dropdownSelect = function(event, ui) { dropdownSelect(event, ui) }; 
$("#auto").autocomplete({ 
    source: "somepage.php", 
    select: dropdownSelect, 
    minLength: 0 
}); 
+0

除了聲明一個單獨的變量和包裝我的函數(它採用相同的參數),這就是我所擁有的,它沒有通過,我猜想附加層有什麼區別?那麼不管我要添加什麼包裝? – Lance 2010-05-24 20:30:11

+0

由於無限循環會導致瀏覽器崩潰。 – 2010-05-24 20:33:02

+0

這會導致堆棧異常,因爲'dropdownSelect'是一個調用自身的'FunctionExpression'。 – 2010-05-24 20:33:21

0
var dropdownSelect = function(event, ui) { ... }; 
var onDropdownSelect = function(event, ui) { dropdownSelect(event, ui) }; 
$("#auto").autocomplete({ 
    source: "somepage.php", 
    select: onDropdownSelect, 
    minLength: 0 
});