ギリギリ行けるお一人様のライン

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

なお、クリックした際に、クリック前までのアンカーを得る方法があれば、それも教えてください。
お願いします。

A 回答 (3件)

まず、きょうび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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/03 09:48

質問は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以外のブラウザも増えてきてますので、そういうのでは使えます。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/03 09:51

<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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/03 09:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報