Re: [問題] JQuery事件的設定
引述《lueichun (no anonymous)》之銘言:
: 我在stackoverflow上看到一個範例:
: http://bit.ly/2nTLOgD
: 裡面有這麼一段code:
:
: function generate_handler( j ) {
: return function(event) {
: switchBanners(j, true);
: };
: }
: for(var i = 1; i <= totalBanners; i++){
: $('#slider-' + i).click( generate_handler( i ) );
: }
$('xxx').click(這邊要放一個function的參照);
當 xxx 被點擊時才會執行 function,所以一般你最常看到的型式應該是這樣:
$('xxx').click(function (event) {
// do something
});
現場宣告一個匿名 function 其實就是現場宣告一個 function 的參照進去。
上面那個範例可以改寫成這樣:
function f(event) {
// do something
}
$('xxx').click(f);
注意是 f 不是 f(),
f 是對 f 這個名稱的 function 的參照,
f() 是執行 f 這個 function。
.click(f) 是把 f 這個 function 的參照作為參數傳給 .click,
所以原本的 $('xxx') 被點擊時會執行 f 這個 function。
那你原先舉的範例的 return function 在做什麼?
其實他運作起來會像這樣:
(下面是複製你提供的範例程式碼,方便解說不用跳來跳去而已)
for(var i = 1; i <= totalBanners; i++){
$('#slider-' + i).click( generate_handler( i ) );
}
還記得只要function名後面有括號,就會直接先呼叫那個function嗎?
執行到 .click( generate_handler(i) ) 的時候,
跟數學一樣,括號優先由內解到外,
generate_handler(i) 會先被執行,
至於呼叫 generate_handler(i) 會獲得什麼?
function generate_handler( j ) {
return function(event) {
switchBanners(j, true);
};
}
這邊運用閉包的概念產生一個全新的匿名 function 參照,
換句話說呼叫 generate_handler(1) 會回傳一個
function (event) {
switchBanners(1, true);
}
所以如果迴圈內當下 i === 2,那最後中間那個 .click 那行實際做的事情會變成:
$('#slider-' + 2).click( function (event) {
switchBanners(2, true);
});
這樣可以理解嗎?
--
● 89 m 9/14 david21911 ◇ 你真是AV神人!
鴻雁往返 (R)回信 (x)站內轉寄 (y)回群組信 (d/D)刪信 (^P)寄發新信 (←/q)離開
稱號:AV神人
耐力+30, 魔法+30, 意志+30, 野生動物訓練成功機率+50%
生命-40, 智力-40, 防禦-10, 保護-25, 女性NPC好感度變化
[請問] 獲得這種稱號該如何處理... http://www.plurk.com/Arsho_Enn
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.73.112
※ 文章網址: https://www.ptt.cc/bbs/Web_Design/M.1490452690.A.8BD.html
※ 編輯: Hevak (1.168.73.112), 03/25/2017 22:39:39
推
03/26 09:56, , 1F
03/26 09:56, 1F
→
03/26 09:56, , 2F
03/26 09:56, 2F
推
03/26 11:23, , 3F
03/26 11:23, 3F
→
03/26 12:09, , 4F
03/26 12:09, 4F
→
03/26 12:09, , 5F
03/26 12:09, 5F
→
03/26 12:09, , 6F
03/26 12:09, 6F
→
03/26 12:10, , 7F
03/26 12:10, 7F
→
03/26 12:10, , 8F
03/26 12:10, 8F
→
03/26 12:10, , 9F
03/26 12:10, 9F
→
03/26 12:11, , 10F
03/26 12:11, 10F
→
03/26 12:11, , 11F
03/26 12:11, 11F
→
03/26 12:26, , 12F
03/26 12:26, 12F
→
03/26 12:26, , 13F
03/26 12:26, 13F
→
03/26 12:26, , 14F
03/26 12:26, 14F
推
03/26 13:00, , 15F
03/26 13:00, 15F
推
03/26 19:33, , 16F
03/26 19:33, 16F
討論串 (同標題文章)
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章