以前的答案严格地从问题分离的角度来处理问题,但也有一些很好的技术原因在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