HTML / DOMでイベントを処理する方法はいくつかあります。実際の正しい方法や間違った方法はありませんが、さまざまな状況でさまざまな方法が役立ちます。
1:HTMLで定義されています。
<input id="clickMe" type="button" value="clickme" onclick="doFunction();" />
2:JavaScriptでイベントのDOMプロパティに追加します。
//- Using a function pointer:
document.getElementById("clickMe").onclick = doFunction;
//- Using an anonymous function:
document.getElementById("clickMe").onclick = function () { alert('hello!'); };
3:そして、JavaScriptを使用してイベントハンドラーに関数をアタッチします。
var el = document.getElementById("clickMe");
if (el.addEventListener)
el.addEventListener("click", doFunction, false);
else if (el.attachEvent)
el.attachEvent('onclick', doFunction);
2番目と3番目のメソッドはどちらもインライン/無名関数を使用でき、要素がドキュメントから解析された後で両方を宣言する必要があります。最初の方法は、onclick属性がXHTML仕様にないため、有効なXHTMLではありません。
1番目と2番目の方法は相互に排他的です。つまり、一方(2番目)を使用すると、もう一方(1番目)がオーバーライドされます。3番目のメソッドでは、1番目または2番目のメソッドも使用されている場合でも、同じイベントハンドラーに好きなだけ多くの関数をアタッチできます。
ほとんどの場合、問題はCapacityChart()関数のどこかにあります。リンクにアクセスしてスクリプトを実行すると、CapacityChart()関数が実行され、2つのポップアップが開かれます(1つはスクリプトに従って閉じられます)。次の行があるところ:
CapacityWindow.document.write(s);
代わりに以下を試してください。
CapacityWindow.document.open("text/html");
CapacityWindow.document.write(s);
CapacityWindow.document.close();
編集
あなたのコードを見たとき、私はあなたがIEのためにそれを特別に書いていると思った。他の人が述べたように、あなたはへの参照を交換する必要がありますdocument.allとdocument.getElementById。ただし、この後もスクリプトを修正する必要があるので、ブラウザーを越えて機能するようにコードを変更するミスをするとさらに混乱を招く可能性があるため、少なくともIEで最初にスクリプトを機能させることをお勧めします。IEで動作するようになると、コードを更新している間、他のブラウザで動作しているかどうかが簡単にわかります。