2009-06-16 17 views
0

アンカータグhrefによって呼び出されたかどうかを関数でどのように特定できますか?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 
    } 
+0

: あなたのコメントの後に、あなたはこれを試すことができますか? http://stackoverflow.com/questions/906486/javascript-can-i-programmatically-invoke-a-onclick-event-from-a-anchor-tag-wh –

+0

hrefではなくonclickを意味しますか? – Gareth

+0

いいえ私はhrefそのものを入手する必要があります – rahul

答えて

2

どう

について
<a href="SomeFunction(this);">Href works here</a> 

function SomeFunction(context) { 

    var callingElement = context; 

} 
+0

問題は、すでに完了しているページに関数が実装されていることです。だから私はすべてのページのすべての機能を変更することはできません。 – rahul

+0

申し訳ありませんが、私は以前にそれを指定していませんでした – rahul

+0

私はあまりよく分かりません...ごめんなさい。 – alex

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を使用することができます。私はそれがうまくいくと言っているわけではありませんが、利用可能なものを見たいかもしれません。

1

@alexが提案したように、ページロードで実行するスクリプトを追加して、hrefを必要なものに変更することができます( 'this'参照を追加します)。

は、例えば以下のスクリプトを取る、これは工assに設定されたID SomeIDにセットまたはクラスでアンカータグの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; 
     } 
    } 
} 
+0

申し訳ありませんが、できません。各アンカーは、異なる機能を呼び出すことができる。 – rahul

+0

その場合、すべての関数の前に関数を追加して、現在のアンカーでグローバル変数を設定することができます。上記の編集を参照してください。 – Dror

関連する問題