SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Javascript】HTML中のイベント属性にスクリプトを書くときの注意

問題

あれ?これ動かないかな?

document.getElementById is not a function って言われた。

<form action="">
<input type="hidden" id="A" name="document" value="123456">
<input type="button" value="alert" onclick="alert(document.getElementById('A').value)">
</form>

答え

イベント属性にスクリプトを書くと、スコープチェーンにformやdocumentが含まれるため、input要素などによくない名前をつけると、想定外の動作をすることがある。

問題の例では、documentという名前のinput要素があるため、onclick内で使われているdocumentは、グローバルなdocument(window.document)ではなく、this.form.document を指している。

this.form.documentはinput要素であり、getElementByIdというメソッドを持っていない。

結果はエラー。

他のよくない名前の例

・window.tagName で INPUT が返ってくる。

<form action="">
<input type="button" name="window" onclick="self.alert(window.tagName)" value="self.alert(window.tagName)">
</form>

・alert()ができない。alertがname=’alert’の要素のことになってしまう。

<img name='alert' alt="Alert!" src="alert.jpg">
<button onclick="alert('test')">alert('test');</button>

参考

Unsafe Names for HTML Form Controls

【Javascript】input要素のonclickに書いたスクリプトについて

関連するメモ

コメント