Я написал следующий код для проекта, над которым я работаю:
var clicky_tracking = [
['related-searches', 'Related Searches'],
['related-stories', 'Related Stories'],
['more-videos', 'More Videos'],
['web-headlines', 'Publication']
];
for (var x = 0, length_x = clicky_tracking.length; x < length_x; x++) {
links = document.getElementById(clicky_tracking[x][0])
.getElementsByTagName('a');
for (var y = 0, length_y = links.length; y < length_y; y++) {
links[y].onclick = (function(name, url) {
return function() {
clicky.log(url, name, 'outbound');
};
}(clicky_tracking[x][1], links[y].href));
}
}
Я пытаюсь сделать следующее:
- определяет двумерный массив, причем каждый экземпляр содержит внутренние массивы, содержащие два элемента: значение атрибута
id
(например, «related-search») и соответствующее описание (например, «Related Searches»);
- для каждого из внутренних массивов, найдите элемент в
document
с соответствующим атрибутом id
, а затем соберите в нем коллекцию всех <a>
элементов (гиперссылок);
- перебирает эту коллекцию и прикрепляет обработчик
onclick
к каждой гиперссылке, которая должна вызывать clicky.log
, передавая в качестве параметров описание, соответствующее id
(например, «Связанные поиски» для id
«related-search») и значение атрибута href
для элемента <a>
, по которому был выполнен щелчок.
Надеюсь, это не совсем сбивало с толку! Код может быть более понятным, чем этот.
Я считаю, что то, что я реализовал здесь, является закрытием, но JSLint жалуется:
http://img.skitch.com/20100526-k1trfr6tpj64iamm8r4jf5rbru.png
Итак, мои вопросы:
- Как я могу изменить этот код, чтобы сделать JSLint приемлемым? Или, что еще лучше, есть ли лучший способ сделать это, которого мне не хватает, независимо от того, что думает JSLint?
- Стоит ли вместо этого полагаться на делегирование событий? То есть присоединение обработчиков событий
onclick
к элементам document
с атрибутами id
в моих массивах, а затем просмотр event.target
? Я уже делал это раньше и понимаю теорию, но я очень туманный в деталях и был бы признателен за некоторые рекомендации о том, как это будет выглядеть - при условии, что это жизнеспособный подход.
Большое спасибо за любую помощь!