2010-11-23 13 views
1

私のページに5つのアンカータグがあります。これらのタグの1つがクリックされると、JavaScript関数を呼びたいと思います。この関数では、どのアンカーがクリックされたかを調べる必要があります。onclickハンドラーを<a>タグでクリックしたタグを確認

これはどのように処理できますか?
純粋なJavaScriptやdojoでやりたいです。

答えて

3
var anchors = document.getElementsByTagName("a"); 

for(var i = 0; i < anchors.length; i++) { 
    anchors[i].onclick = function() { 
     alert(this.id); 
     doStuff(id); 
     return false; 
    } 
} 

デモ:http://jsfiddle.net/FVWqT/1/

注意、あなたは以上の5つのアンカーを持っている、とだけ特定のものをターゲットにしたい場合は、あなたが例えば、クラスによってフィルタリングすることがあります:

var anchors = document.getElementsByTagName("a"); 

for(var i = 0; i < anchors.length; i++) { 
    if(anchors[i].className == "something") { 
     anchors[i].onclick = function() { 
      alert(this.id); 
      doStuff(id); 
      return false; 
     } 
    } 
} 
+0

は、あなたがより良いドキュメントのonloadイベントでこのコードを持っていますすべてのアンカータグが確実に存在するようにします。 (anchors [i] .className == "something"){:-) –

+0

@Shadow Wizard - ありがとう、私は今タイポを修正しました。 – karim79

+0

歓声、私の喜び..同じ方法を使用する方が効率的ではないでしょうか? –

1

ページ内の各リンクにonclickハンドラを定義する代わりに、パフォーマンスを向上させるために、リンクコンテナでイベント委譲を使用することができます(このテクニックはあなたの仕事に完全に適合します)。

(function() { 
    var divcnt = document.getElementById('linkcnt'); 
    divcnt.onclick = function(evt) { 

     var event = (evt || window.event), 
      target = (event.target || event.srcElement); 

     if (evt.target.tagName === 'A') { 
      // event.target is DOM reference to link you clicked 
      // evt.target.id is the ID; 
      alert(evt.target.id); 

      //callmyfunction(event.target) // Call a function with DOM reference 
     } 
    } 
})(); 

はここで働くの例を参照してください。http://jsfiddle.net/fcalderan/MSvvh/

+0

これはすべてのブラウザで機能しますか? – Eric

+0

イベントの委任は、イベントのバブリングのために現在のすべてのブラウザで機能します。イベントがコンテナに到着したときにクリックをキャプチャしています。 –

1

んが、複雑な構築物は必要ありませんが、アドレスバーにそれをあなたの自己を試してみてください。

javascript:(
    function() { 
    for (var i=0; i<document.links.length; i++) 
     document.links[i].onclick = function() { 
     return confirm(this.href+'\nORLY?') 
     }; 
    } 
)();