2

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

$(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事件无法完成。Chrome21.0.x似乎正在工作,但不确定这是否是“偶然”。

编辑 2

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

4

1 回答 1

0

事件向上冒泡,因此单击的元素会在您之前触发它的事件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;
}
于 2012-08-28T22:12:39.413 回答