0

次のようなコードがある場合:

<script>
function determine()
{
    // ????
}
</script>

<a href="blah1" onclick="determine()">blah1</a>
<a href="blah2" onclick="determine()">blah2</a>

define() でどのリンクがクリックされたかを確認する方法はありますか?

(はい、知っています。簡単で正しいのは、determin() に「this」を渡すことです...しかし、この場合、レガシー コードの問題のために簡単には実行できません。)

編集:私はおそらく最初にこれを言及すべきだった...私たちのサイトは現在JQueryを使用していません(そして当分の間使用できません)...したがって、JQueryの回答(このタイプの質問には一般的に価値があります)は「 t 実際に私を助けます。

4

6 に答える 6

4

quirksmode のこのリンクをチェックしてください。イベント対象を取得できます。

function doSomething(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
}
于 2009-06-01T19:15:26.613 に答える
2

そのまま JavaScript を使用することもできますが、私は jQuery のようなものを使用することを好みます。

<a href="blah1">blah1</a>

<script type="text/javascript">
  $('a[href=blah1]').click(function() {
    var link = $(this); // here's your link.
    return false; // acts like the link was not clicked. return true to carry out the click.
  });
</script>

$().click()機能を使用していると仮定すると$(this)、リンクが表示されます。

于 2009-06-01T19:16:56.440 に答える
1

HTML で onclick="determine()" を変更できないが、determine() 関数を変更できる場合、最善の策は次のとおりだと思います。

何もしないように、determine() 関数を空白のままにします。

JavaScriptを使用して(他の回答で説明されているように)実際のクリックハンドラーを各リンクに追加し、イベントを使用してどのリンクがクリックされたかを判断し、目的のコードを実行します。

于 2009-06-01T19:44:56.883 に答える
0

別の解決策:

onclick ハンドラーをドキュメントに追加します。ユーザーがリンクをクリックすると、クリック イベントがウィンドウに「バブル」し、どのリンクがクリックされたかを判断するためにイベントにアクセスできます。

これは、すでに onclick="determine()" が含まれているリンクに対してのみコードを実行する場合に便利です。determine() 関数を設定して変数を設定できます。次に、ユーザーがリンクをクリックすると、determine() 関数が実行されて変数が設定されます。ドキュメント クリック ハンドラーが実行されると、変数を確認できます。リンクに onclick="determine()" が含まれていることがわかります。

これをもう少し複雑にすることができるかどうか教えてください... :-)

于 2009-06-01T19:51:14.780 に答える
0

属性を変更できない場合はonclick、JavaScript でパッチを適用します。

// use a DOMContentLoaded hack or `onload` as fallback
onload = function() {
    var links = document.links;
    for(var i = 0; i < links.length; ++i) {
        // there might be a better way to check which links to modify
        // don't know without further details
        if(/determine\(\)/.test(links[i].onclick))
            links[i].onclick = determine;
    }
};

function determine() {
    // the link is now available as `this`
    alert(this.href);
}

おそらく、より良い解決策は、event標準に準拠したブラウザー用のグローバルな IE スタイル オブジェクトにパッチを適用することです。

if(document.addEventListener) {
    document.addEventListener('click', function(e) {
        window.event = e;
    }, true);
}

function determine() {
    var src = event.target || event.srcElement;
    alert(src.href);
}
于 2009-06-01T20:07:30.863 に答える
0

次のように各リンクにイベントを追加できます

links = document.getElementsByTagName('a');

for (link in links) {

   link.onclick = function() {
      alert(this.id);
      determine(); // or some other important code?
   }

}
于 2009-06-01T19:15:56.990 に答える