0

関数内で、アンカータグhrefによって呼び出されたかどうかをどのように識別できますか?

この場合、イベントはnullです。したがって、event.targetとevent.srcElementは機能しません。

コード

HTML

<a href="SomeFunction();">Href works here</a>

JavaScript

   function SomeFunction ()
   {
      // I need to get the anchor element that invoked this function
   }
4

3 に答える 3

2

どうですか

<a href="SomeFunction(this);">Href works here</a>

function SomeFunction(context) {

    var callingElement = context;

}
于 2009-06-16T04:56:15.240 に答える
1

@alexが提案したことに続いて、ページの読み込みで実行するスクリプトを追加して、hrefを希望どおりに変更できますか(「this」参照を追加)?

次のスクリプトを例にとると、IDがSomeIDに設定されているアンカータグまたはクラスがSomeClassに設定されているアンカータグのhref値が変更されます。

function changeLinks() {
    var all_links = document.getElementsByTagName("a");
    for (var i=0; i<all_links.length; i++){
        if (all_links[i].id == 'SomeID' || all_links[i].className == 'SomeClass') {
            all_links[i].href = 'SomeFunction(this);';
        }
    }
}

お役に立てれば...

編集:あなたのコメントに続いて、あなたはこれを試すことができます:

var clickedAnchor = null;

function setClickedAnchor(obj) {
    clickedAnchor = obj;
}
function changeLinks() {
    var all_links = document.getElementsByTagName("a");
    for (var i=0; i<all_links.length; i++){
        if (all_links[i].id == 'SomeID' || all_links[i].className == 'SomeClass') {
            all_links[i].href = 'setClickedAnchor(this);' + all_links[i].href;
        }
    }
}
于 2009-06-16T05:56:39.750 に答える
0

私の知る限り、標準のJavascriptを使用してこれを実現する方法は2つしかありません。最初の方法はすでに概説されています-ノードをパラメーターとして関数に渡します。もう1つの方法はonclick、アンカーのイベントを処理することです。これは、パラメータを関数に渡すためにマークアップを変更する必要があるという点で、前のアプローチと非常に似ています。これを行うには、マークアップを次のように変更する必要があります。

<a href="#" onclick="SomeFunction(event)">Href works here</a>

function SomeFunction(event) {
    var node = event.srcElement;
}

上記のコードは、イベントオブジェクトを関数に渡します。この関数は、イベントに関するあらゆる種類の興味深い情報を提供します。

ブラウザに送信されるマークアップを変更できない場合は、JQueryや別のAJAXライブラリなどを使用して、実行時にノードのイベントハンドラを検索および変更することを検討してください。ブラウザに到達する前にマークアップを変更することは明らかに望ましいことですが、選択の余地がない場合もあります。

最後に、マークアップを変更できず、実行時にDOMを変更したくない場合は、使用可能なJavascriptエンジン固有の機能をいつでも確認できます。たとえば、arguments.callerそれをサポートするエンジンで利用できる場合があります。私はそれがうまくいくと言っているわけではありませんが、あなたは何が利用できるかを見たいかもしれません。

于 2009-06-16T05:44:43.690 に答える