【Javascript】recalcっていう名前の関数がonclickで使えない
問題
onclick属性にrecalc()って書いたら、IEで動かないんだけど、なんで?
<script> function recalc() { alert("再計算して!"); } </script> <input type="button" value="再計算" onclick="recalc();" />
Firefoxとかなら動くのに。
答え
input要素のonclickに書いたスクリプトのスコープチェーンはちょっと特殊なのと、IEにはdocument.recalcという関数が存在するのが原因。
onclickに書くと、
その要素.recalc
→ そのフォーム.recalc
→ document.recalc
→ window.recalc(グローバルなrecalc())
の順で探しにいく。
通常は、グローバルなrecalc関数を定義しておけば、window.recalcが呼ばれるが、IEはwindow.recalcの前にdocument.recalcが存在するため、document.recalcが呼ばれてしまう。
IEではdocument.recalcが呼ばれるので、エラーにもならないし、見た感じ何もおきていないように見える。
コメント