Предыдущие ответы подходили к проблеме строго с точки зрения разделения интересов, но есть также несколько веских технических причин, чтобы иметь обработчики событий в 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, тогда этот параметр должен был бы быть глобальным, чтобы он былвнутри области внутри обратного вызова.