У меня есть карусельный баннер, который динамически создается, и я не могу контролировать HTML. Он генерирует приведенный ниже код для каждого изображения в карусели, единственное, что меняется, это img id; он увеличивается на 1.
<a href="/somelike.aspx" onclick="window.open(this.href, (this.target? this.target : '_self'));return false;"><img id="theimg1_0" src="someimage.jpg" alt="Slide Show Image" title="" border="0"></a>
Мне нужно написать jQuery, поэтому, когда это событие запущено:
onclick="window.open(this.href, (this.target? this.target : '_self'));
Я запускаю это событие:
_gaq.push(['_trackEvent', 'slider2', 'click', $(this).attr('href'),0,true]);
Я бы использовал делегацию событий и не беспокоился об изменении существующего события onclick. Если вы используете jQuery, вы можете сделать что-то вроде этого:
$('#carousel').on('click', 'a', function(){
_gaq.push(['_trackEvent', 'slider2', 'click', this.href,0,true]);
});
РЕДАКТИРОВАТЬ:
Теперь я вижу, что исходный код onclick-обработчика возвращает false, заставляя делегировать событие. Попробуйте это вместо этого:
$('#carousel').on('mousedown', 'a', function(){
this.onclick = function(e){
window.open(this.href, (this.target? this.target : '_self'));
_gaq.push(['_trackEvent', 'slider2', 'click', this.href,0,true]);
e.preventDefault();
}
});
Мышь должна стрелять до того, как произойдет событие onclick, что позволит вам заменить обработчик события onclick.
Просто укажите функцию как обработчик события примерно так:
HTML:
<a href="/somelike.aspx" onclick="onClickHandler();"><img id="theimg1_0" src="someimage.jpg" alt="Slide Show Image" title="" border="0"></a>
JavaScript:
function onClickHandler(){
window.open(this.href, (this.target? this.target : '_self'));
_gaq.push(['_trackEvent', 'slider2', 'click', $(this).attr('href'),0,true]);
}