将自定义函数注入onclick事件

时间:2012-08-28 21:58:15

标签: javascript jquery javascript-events socket.io

我要做的是记录给定网页上的所有用户活动,因此我使用socket.io将页面上注册的事件发送到服务器,如下所示: / p>

$(document).on('click.mynamespace', function(event){
    var elem = event.target;
    socket.emit('my-message', { 'element' : elem };
}

我面临的问题是目标元素是这种<a href="#" onclick="someFunctionThatRedirects()">My link</a>的链接。在正确执行socket.emit语句之前,调用任何函数并卸载页面(断开我的套接字)。

我想让它尽可能地普及,因为它将作为插件工作,并希望它适应任何我无法控制的环境。

那么,有没有办法“高举”所有点击事件,先用我的自定义函数发送它们,然后继续“正常”执行,无论它是什么?

修改

似乎只有FF(在14.0.1上测试)导致socket.emit事件无法完成。 Chrome 21.0.x似乎正在运作,但不确定这是不是“偶然”。

编辑2

函数someFunctionThatRedirects实际上以这种方式重定向window.location.ref = clickedurl

1 个答案:

答案 0 :(得分:0)

事件泡沫向上,因此clicked元素会在socket.emit之前触发事件,您可以更改函数的工作方式,使其按照您想要的顺序执行操作

function someFunctionThatRedirects(){
    window.redirectTo = 'myNewPage';
}
$(document).on('click.mynamespace', function(event){
    var elem = $(event.target)[0];
    socket.emit('my-message', { 'element' : elem };
    if(window.redirectTo !== undefined) window.location.href = window.redirectTo;
}