3

制限により、私は完全に避けていますが、特定の状況では、achor タグの href 属性で javascript: 構文を使用する必要があります。

(説明: 私の CMS では、リッチ テキスト エディターを使用して、ユーザーがリンクを含むテキスト要素を変更できるようにしています。場合によっては、特定の javascript: 呼び出しが必要であり、リンク編集機能から onclick を完全に禁止しています (プロセスを簡素化するため)。ただし、onclick イベントに反応するブロック内にリンクの 1 つが表示されると、ダブルファイアが発生します)。

このような:

<a href="javascript:doSomething()"></a>

私の問題は、このリンクが onclick イベントに既に反応するコンテナー内にあることです。したがって、イベント オブジェクトを doSomething() メソッドに渡して、jQuery の

event.stopPropagation()

方法。

残念ながら、しかし、イベントオブジェクトを渡すようです

<a href="javascript:doSomething(event)"></a>

まったく機能していないようです。Firefox はReferenceError: event is not definedを報告しますが、Safari は何も言いません。

href="" はスクリプト開始属性 (onclick など) ではないため、これが当てはまると思います。問題は、この状況では、既に行っていることを超えてタグにアクセスできないことです。

したがって、私はどちらかが必要です

1.) href 属性内から doSomething() 関数にイベント オブジェクトを渡す方法

また

2.) 他の方法で (クリックされた後) そのアンカーでイベントの伝播を停止する方法。

建設的なご意見ありがとうございます。

4

4 に答える 4

9

href次の理由により、属性からのイベントの伝播を停止できません。

  1. hrefコードが実行されるとき、それはイベントではありません。「ロケーションハック」と同様に、そのコードを実行するだけです。javascript:doSomething()ブラウザのアドレスバーに入力するようなものです。

  2. href コードは、リンクでイベントが発生したに実行されます (バブリングを含む)。

    この jsFiddleでその動作を確認できます。mouseupmousedown、およびすべては、コードが実行clickされる前に、リンクと、リンクがクリックされたときのコンテナーの両方で起動することに注意してください。href

ブロックしたいイベントリスナーがある場合は、別の方法を見つける必要があります。


ただし、JavaScript をドキュメントに追加できる場合はhref、 using をブロックできますpreventDefault()

例えば:

  • バージョン 1.7 より前の jQuery:

    $("#container a").bind ("mousedown mouseup click", function (e) {
        e.preventDefault();
    } );
    
  • jQuery 1.7 以降:

    $("#container a").on ("mousedown mouseup click", function (e) {
        e.preventDefault();
    } );
    

    または(より良い):

    $("#container").on ("mousedown mouseup click", "a", function (e) {
        e.preventDefault();
    } );
    


この最後のバージョンは jsFiddle でライブで見る ことができます。

于 2012-10-12T01:51:39.197 に答える
0

href属性でjavascriptを記述した場合に、引数を取得する方法があるかどうかはわかりません。ただし、onclickで次のように取得できますが、おっしゃるように、これはベストプラクティスではありません。

<a onclick="console.log(arguments)">your link</a>

引数配列では、イベントオブジェクトを取得します。

これがあなたのためのデモです:

http://jsfiddle.net/tEw5J/1/

于 2012-10-12T01:23:58.110 に答える