Как прослушать событие onclick, а затем добавить другое событие onclick

0

У меня есть карусельный баннер, который динамически создается, и я не могу контролировать 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]);
Теги:

2 ответа

3
Лучший ответ

Я бы использовал делегацию событий и не беспокоился об изменении существующего события 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.

  • 0
    Я пробовал это, но это не сработало. Я думаю, это потому, что карусель динамически меняется каждые несколько секунд, поэтому меняется html. Я помещаю событие click в событие onload, должен ли я делать это по-другому? (Дайте мне знать, если вам нужен пример)
  • 0
    Делегирование событий - это способ избежать изменения HTML-кода. Я не замечал раньше, что событие onclick возвращало false, поэтому делегация не работает. Событие остановлено, чтобы не всплеснуть дерево DOM, что, я бы сказал, было недальновидным шагом со стороны автора карусели.
Показать ещё 1 комментарий
0

Просто укажите функцию как обработчик события примерно так:

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]);
}
  • 0
    У меня нет контроля над html, поэтому я не могу добавить событие onclick = "onClickHandler ();" на ссылку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню