以前的答案嚴格地從問題分離的角度來處理問題,但也有一些很好的技術原因在JavaScript中有事件處理程序。在我看來,其中最主要的是你可以使用閉包來封裝事件處理程序所需的一些信息。
例如,假設您正在接收位置列表和佔位符,並且想要繪製 指向這些位置的鏈接列表,並在點擊該位置時彈出一個包含該位置名稱的警報彈出窗口。這是如何做到這一點的一個例子:
function alertGenerator(loc) {
return function() {alert("Hi, I'm visiting " + loc);};
}
function createLocationList(locations, placeholder) {
// Create a jQuery wrapper for placeholder
var $placeholder = $(placeholder),
loc,
location,
$link;
// loop over the locations, create a link for each iteration
for (var loc in locations) if locations.hasOwnProperty(loc) {
location = locations[loc];
$link = $("<a>");
$link.text(location).click(alertGenerator(location));
$placeholder.append($link);
}
}
如果你要嘗試使用onclick屬性來做到這一點,你會遇到兩個大問題。首先,你會主要處理字符串,而不是實際的函數和DOM元素(或jQuery對象)。根據我的經驗,這種代碼難以調試。其次,如果要參數化onclick中的函數調用,那麼該參數必須是全局的,以便它在回調中位於範圍內。
歡迎除以上兩個答案... thx – Dooie