2

私がやろうとしているのは、特定のWebページでのすべてのユーザーアクティビティを記録することです。そのため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.emitChrome21.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 に答える