如何监听onclick事件,然后添加另一个onclick事件

时间:2014-03-21 12:43:58

标签: javascript jquery html

我有动态创建的轮播横幅,我无法控制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 个答案:

答案 0 :(得分: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();
    }
});

mousedown应该在onclick事件触发之前触发,让你有机会替换onclick事件处理程序。

答案 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]);
}