1

サイトhttp://xn--wiadomesny-37b.pl/test/がスローするのはなぜUncaught TypeError: Cannot set property 'innerHTML' of nullですか?

HTML ( http://xn--wiadomesny-37b.pl/test/ ):

<div class="castle_array" id="2x1" name="2x1"></div>
<div class="castle_array" id="3x1" name="3x1"></div>
<div class="castle_array" id="4x1" name="4x1"></div>
...

JavaScript ( http://xn--wiadomesny-37b.pl/test/B_modeWindow.js ):

for (x = 1; x <= 5; x++) {
for (y = 1; y <= 5; y++) {
  document.getElementById(x+"x"+y).addEventListener("click",B_modeWindow('1',this.id));
}}

私が変更するとき

("click",B_modeWindow('1',this.id)

("click",B_modeWindow('1','string')

それは魅力のように機能します-なぜですか?

4

1 に答える 1

2

コードには2つの基本的な問題があります。

まず、これを行う場合、コールバックをクリックイベントハンドラーに割り当ててaddEventListener("click", B_modeWindow('1', this.id));いるのではなくB_modewindow、実際に関数を実行しています。

次に、そのコンテキストでは、クリックされた要素を参照this せずWindow、オブジェクトを参照するため、代わりに次を使用しthis.idます。undefinedevent.target.id

これを修正するには、代わりに以下を使用してください。

var el = document.getElementById(x+"x"+y);
el.addEventListener("click", function (event) {
  B_modeWindow('1', event.target.id);
});

これが簡略化されたデモです。

于 2012-09-09T19:17:30.797 に答える