• ベストアンサー

アンカークリックのイベントを取得するには??

<a href="#..." ..> のようなアンカーによる場所の移動だけのタグがあります。 これをクリックしたときに処理を行いたいです。 ただ、多量のタグに対して処理を割り当てたいので、 onClick イベントをaタグにつける方法ではない方法がないかと探しています。 例えば、<body onload="kansuu();"> のようにすればページのロード時に kansuu() を実行してくれます。 が、これではアンカーによる場所移動だけの場合にはページをリロードしないので、kansuu()は呼び出されません。 この <body onload="kansuu();"> のように、一箇所に記載するだけで、 アンカークリック時に実行されるような方法を探しています。 もし分かりましたら教えてください。 なお、クリックした際に、クリック前までのアンカーを得る方法があれば、それも教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

まず、きょうびbodyのonloadははやってないので、以下のようにしてみては? <script> window.onload=function(){kansuu();} function kansuu(){略;} </script> で、初期処理を設定できるので、アンカーに対する処理として 以下のようにざっと処理をいれてしまうとよいかと。 <script> window.onload=function(){ kansuu(); setAnchor(); } function kansuu(){ } function setAnchor(){ var tags=document.getElementsByTagName("a"); for (var i in tags) tags[i].onclick=function(){alert("test")}; } </script>

palayo
質問者

お礼

window.onload を使ってできました!! ありがとうございました!!

その他の回答 (2)

回答No.3

質問は2つありますよね? > アンカークリック時に実行されるような方法を探しています。 document objectでは、document.linksで<a>一覧を取得できます。 (document.formsはよく使われている方法です) <script> function init(){ kansuu(); for(var i=0,as=document.links;i<as.length;as[i++].onclick=kansuu); } function kansuu(){ //なにか } </script> <body onload="init();"> 上記<body onload="">のかわりにwindow.onloadを使うこともできます。 window.onload=function(){ kansuu(); for(var i=0,as=document.links;i<as.length;as[i++].onclick=kansuu); } DOMで。 DOMを使うと長くなりますが、<a>だけでなく<div>や<form>なども共通の書き方で書けるというメリットがあります。 (さらにC#、PHP、JavaなどのDOMをサポートする言語でも共通の書き方ができます) <script> if(window.addEventListener){ window.addEventListener('load', kansuu, false); window.addEventListener('load', init, false); }else if(window.attachEvent){ window.attachEvent('onload', kansuu); window.attachEvent('onload', init); } function init(){ var as=document.getElementsByTagName('A'); if(window.addEventListener){ for(var i=0,a;a=as[i];i++){ a.addEventListener('click', kansuu, false); } }else if(window.attachEvent){ for(var i=0,a;a=as[i];i++){ a.attachEvent('onclick', kansuu); } } } function kansuu(){ // なにか } </script> <body> 未検証です。 > なお、クリックした際に、クリック前までのアンカーを得る方法があれば、それも教えてください。 こっちの方法は、ANo.2が一番的を射ていると思います。 element.tagNameはJScript(いわゆるIE専用)なので、element.nodeNameの方が良いと思います。 (JScriptをサポートするIE以外のブラウザも増えてきてますので、そういうのでは使えます。)

palayo
質問者

お礼

最終的にwindow.onclickを使用したらできました。 ありがとうございました。

noname#84373
noname#84373
回答No.2

<html> <a href="#abc" id="abc" name="efg">abc</a> <script> addEvent( document.body, 'click', test ); function test( evt ){ var element = evt.target || event.srcElement; if( element && element.tagName == 'A') alert([ element.href, element.id, element.name ]); } function addEvent(elementId, evt, eventHandler, flag){ var element = ( typeof( elementId ) == 'string' )? document.getElementById( elementId ): elementId; element./*@cc_on @if(1)attachEvent('on'+ @else @*/addEventListener(/*@end@*/evt, eventHandler, flag); } </script>

palayo
質問者

お礼

最終的にwindow.onclickを使用したらできました。 ありがとうございました。

関連するQ&A