0

リンクに .preventDefault() (および false を返す) を追加して、リンクが通過するのを停止することに精通していますが、リンクが preventDefault (および/または false を返す) に設定されているかどうかを確認する方法を知っている人はいますか? ?

mockJS での例:

$('a').not().preventDefault().click(function() {
  //report that the link has been clicked
}

注: リンクがデフォルトの動作に従わないようにするスクリプトが追加される可能性があるかどうか、またはどのようなスクリプトが追加されるかはわかりません。

ありがとう、スティーブ

4

1 に答える 1

1

1つのオプションは、持っている「リンク」の各タイプ(カルーセル、タブ、hrefなど)に別のクラスを適用し、追跡用のクリックハンドラーを次のように変更することです$('linkClass').click(function() {.....});

編集:ここでの私のポイントは、必ずしも 1 つの余分なクラスのみを使用する必要があるということではありませんが、リンクを追跡する方法として、リンクのフラグとしてクラスを使用するのが最適です。あなたのコード全体を見ないと、これをあなたのニーズに合わせることができないので、かなり一般的なものにしました。

編集 2: このアイデアをもう少し明確にしたいだけです。

あなたがすることは、リンクのセレクターをセットアップすることです (このセレクターは、これを行うために、いくつかの異なる ID、クラスなどを監視する必要がある場合があります)。そのセレクターにクリック イベント ハンドラーを追加し、これらのリンクのいずれかがクリックされるたびに、トラック コードを容易にするために、クラスの形式でトラック フラグを追加します。

例:

var $links = $(...[selector stuff]...);
$links.click(function() {
    var $this = $(this);
    $this.addClass("clicked");
    ...do clicked stuff...
    $this.addClass("isActive");
    ...do active stuff...
    $this.removeClass("isActive").addClass("visited");
    ...do visited stuff...
});

この手法を使用すると、追跡メソッドの一部またはすべてがクリック イベント ハンドラーの外部で実行された場合に、どのリンクがクリックされたかを後で確認して確認することもできます。

この手法のもう 1 つの優れた点は、クラスの追加と削除に関するオーバーヘッドが少ないことです。多くの人は、クラスを考えるときにスタイルを本能的に考えているため、オーバーヘッドが少ないことに驚いています。ただし、クラスは要素の最も有用な属性の 1 つであり、スタイルを追加または削除しない限り、オーバーヘッドは最小限に抑えられます (フラグにクラスを使用することも、.NET 開発では非常に一般的な方法です)。

于 2012-07-30T16:00:37.100 に答える