0

すべてのボディクリックイベントにフックするWebページがあります。

if (0 == $('body').hasEventListener("click.custom").length) {
    $('body').bind("click.custom", function(e) {
        console.log(e.target);
    });
}

このメソッドでクリックしたすべての要素を出力したいのですが、追加のイベントハンドラーがある場所で問題が発生しています。次のコードを検討してください。

<a href="www.stackoverflow.com" class="my-link">Click</a>
<script>
    $(document).on("click", ".my-link", function(e) {
        alert("not allowed to click this");
        e.preventDefault();
    });
</script>

最終的に発生するのは、preventDefault呼び出しが、カスタムイベントの実行を妨げることです。
ユーザーをリンクにリダイレクトするデフォルトのイベントを防止したいのですが、カスタムイベントを発生させたいのです。

もちろん、デフォルトが呼び出されないようにどこからでもすべてのイベントを手動でトリガーすることは可能ですが、そうするための一般的な方法はありますか?

ありがとう!

4

2 に答える 2

0

間違いなく私のエラー - カスタムの preventDefault が定義されていて、次の内容が含まれていました。

e.stopPropagation();
e.stopImmediatePropagation();

明らかにそれが問題でした。ありがとうございました!

于 2012-10-01T15:32:01.300 に答える
0

hasEventListener メソッドの実装が何であるかわかりません。これがカスタム イベント バインディングを妨げていると思います。

ただし、チェックを外すと正常に動作します。

http://jsbin.com/udonew/3/edit

于 2012-09-30T21:42:35.670 に答える