2012-04-03 65 views
2

我对这个脚本有问题。起初,我有<div> s硬编码,它工作正常。但后来我需要动态改变导航栏,因为我改变了(数量)链接。如何在javascript中动态编写对象时注册DOM id?

问题是,当它们注入element .innerHTML =(html字符串)时,这些标识符没有注册。

我该如何解决这个问题?

下面是代码:

的javascript:

function constructNav() { 
    var submenu_layer_innerHTML = ""; 
    var top_nav_innerHTML = "<UL class=\"nav_category\">"; 
    for (i=0; i<links.length; i++) { 
    submenu_layer_innerHTML = "<div class=\"submenu\" id=\"submenu" + i + "\" onMouseOut=\"timeHideNav('" + i + "','1000')\"> </div>"; 
    top_nav_innerHTML += "<LI id=\"link" + i + "\"><a href=# onMouseOver=\"expandNav('" + i + "');\">" + links[i] + "</a></LI>"; 
    } 
    top_nav_innerHTML += "</UL>"; 
    document.getElementById("top_nav").innerHTML = top_nav_innerHTML; 
    document.getElementById("submenu_layer").innerHTML = submenu_layer_innerHTML; 
} 

HTML:

<script type="text/javascript" src="scripts.js"> </script> 
<script type="text/javascript"> 
var links =["link 1", 
    "link 2", 
    "link 3", 
    "link 4", 
    "link 5", 
    "link 6"]; 
</script> 

<body onLoad="constructNav();"> 

<div id="submenu_layer"> </div> 
<div id="top_nav"> </div> 

我得到这个错误在Firefox:

line 35: document.getElementById("submenu"+pageNo) is NULL 
+0

它工作正常,在我的Firefox 11.0,所有的元素都标识。 (link0〜link5,submenu5) – 2012-04-03 22:10:46

+0

我在firefox中得到这个错误:'document.getElementById(“submenu”+ pageNo)is NULL' 当我将'

'(其中10个)改为6动态生成在JavaScript中。 – Ozzy 2012-04-03 22:15:24

回答

1

您的for循环的每次迭代过程中覆盖submenu_layer_innerHTML。确保使用+=

+0

lool我不敢相信那是:/。现在感觉像个白痴。在我的防守中,我没有使用IDE,所以它不容易被发现。谢谢。 – Ozzy 2012-04-03 22:17:48

+0

我不知道当你没有任何错误时IDE会有多大的帮助。但是,仍然使用IDE! [这是免费的](http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-web-developer-express)。 – gilly3 2012-04-03 22:34:48

+0

哦,因为IDE会对我的代码进行颜色编码并保持良好的缩进 - 所以我会更快地发现我的错误。谢谢,我已经安装了IDE,但我从来没有使用它。 (我一直在做小网站,所以我只是在记事本中硬编码) – Ozzy 2012-04-07 13:48:25

0

constructNav没有定义 而是试试这个:http://jsfiddle.net/5GjNs/

+0

'constructNav()'被定义。我改变了顺序,这样''links'就在'scripts.js'导入之前,所以'links'在脚本运行之前被定义。 – Ozzy 2012-04-03 22:14:16

1

尝试jQuery的直播功能..

$("div.something").live('click', function(){ 
    // do something... 
}); 
+0

感谢您的回答。它实际上有效,但我错误地重写了innerHTML。 – Ozzy 2012-04-03 22:18:37