2011-09-14 7 views
1

私はその後、コードには今何が起こっているのかJavascriptが

lnk = document.getElementById('lnk1') 
lnk.onclick = function() { do something} 

のように同じアンカータグに追加され

<a id='lnk1' onclick='do something' >test</a> 

のようなコードがある持っているのonClickそのコードのonclickの機能の第二の部分でアンカータグが上書きされています。代わりに起こってほしいのは、最初のonclickのコードが実行され、その後に2番目のonclickが実行されるということです。

+0

ルック。 – Shef

+0

正確な重複はありませんが、参考になるほど十分に関連しています:http://stackoverflow.com/questions/2790583/javascript-append-to-onclick-event – David

+0

@Baszzいいえ、それは動作しません。ブラウザは属性の文字列値を本格的なJavaScript関数に変換するので、文字列形式で追加コードを追加するだけで意味がありません。 – Pointy

答えて

3

lnk1.addEventListener('click', function() { 
    // do something 
}); 

あなたがこれを行う必要がありますので、これは、バージョン9の前にIEでは動作しません:

var handler = function() { 
    // do something 
}; 

if ("addEventListener" in lnk1) { // standards-compliant browsers 
    lnk1.addEventListener('click', handler); 
} else { // Internet Explorer < v9 
    lnk1.attachEvent('onclick', handler); 
} 

これは動作し、HTML属性で指定された元の関数と上記のコードの両方が実行されます。 HOWEVER Javascriptでは、すべてのイベントハンドラを同じ場所に定義する方がはるかに良いでしょう。あなたのHTML属性からイベント処理ロジックを削除することについて懸命に考えてください。

JAVASCRIPT

lnk = document.getElementById('lnk1') 
lnk1.onclick = function() { do something} \\ replace lnk1 with lnk 
lnk.onclick = function() { do something} \\ this will work 

あなたが変数としてlnkを定義しましたが、あなたはonclickイベントにlnk1を呼び出している:

3

あなたはこれを試みることができる:

var lnk = document.getElementById('lnk1'); // don't forget var! 

var oldHandler = lnk.onclick; 
lnk.onclick = function(ev) { 
    if (oldHandler) oldHandler(ev); 
    // do something ... 
}; 

このコードは、古いハンドラへの参照を保存し、それが空でなければ、それは新しいハンドラが何をしたい任意の他行う前に、それを呼び出します。

新しいコードの後に古いハンドラの呼び出しを入れたり、混在したりすることができます。

+0

それがうまくいくなら、それは良い解決策です! –

1
<a id='lnk1' onclick='do something' >test</a> 

はJavaScript

lnk1 = document.getElementById('lnk1') 
    lnk1.addEventListener('click',function() { do something}, false); 

onclickのあなたが上書きされ、既存の属性を設定するが、それはOKになりますイベントリスナーを介してクリック割り当てます。これを行うには非常に単純な、標準規格に準拠した方法はあり

+0

いいですが、IE8で動作しません、firefox、chrome、ie9で動作します –

0

はあなたの文に誤りがあります。これは間違った発言です。

のUSE HTML

<a id='lnk1'>test</a> 

はデモを参照してください:[ `addEventListener`](https://developer.mozilla.org/en/DOM/element.addEventListener)でhttp://jsfiddle.net/tm5cX/

+1

これを指摘するためのthanx –