2012-09-09 47 views
1

为什么网站http://xn--wiadomesny-37b.pl/test/引发Uncaught TypeError: Cannot set property 'innerHTML' of null为什么JavaScript无法找到给定的InnerHTML并返回无法设置属性'innerHTML'为null?

HTMLhttp://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> 
... 

的JavaScripthttp://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')

它就像一个魅力 - 为什么?

+0

因为JavaScript没有找到它应该显示的元素,所以它正在工作。请发布一个[现场演示](http://jsfiddle.net/),重现问题或您的问题。 –

+0

All all in source –

回答

2

您的代码有两个基本问题。

首先,当你做addEventListener("click", B_modeWindow('1', this.id));,你分配B_modewindow回调到单击事件处理程序,你实际上是执行功能。

其次,在这种情况下this指点击的元素,它指的是Window对象,从而this.id给你undefined,使用event.target.id代替:

为了解决这个问题,请使用以下而不是:

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

这里有一个简单的DEMO

+0

然而,它thorks(不关键)错误:'未捕获的TypeError:无法设置属性'innerHTML'null B_modeWindow.js:14 B_modeWindow.xmlhttp.onreadystatechange' –

+0

@ user1656447:你是否更新了代码矿?看到我的演示,提醒值是正确的。你可以更新你的网站,以便我可以检查什么是错的? –

+0

对不起若昂席尔瓦,你的解决方案是完美的。感谢您提供非常详细和有用的解释。 –

相关问题