2011-09-05 68 views
2

我正在制作一个XML驱动的主页。生成菜单结构,当点击菜单元素时,页面上的内容会改变。当点击一个level x元素时,它的子元素将出现在主div的列表中。这是通过一个函数changePage(id)完成的,它将一个id作为参数来查找正确的XML节点以获取信息。使用全局变量在JavaScript中调用函数内部功能

我想这个列表中的元素是链接,点击时他们应该调用changePage函数。这用于在树中下台。

var root = loadXML(aXML.xml); 

function changePage(id){ 
var current_node = root; // <-- here I get error when clicking on the a-element. 
... // creating list 
var aElement = document.createElement('a'); 
aElement.onclick = new Function("changePage('" + index + "')"); 
} 

当我点击我的菜单项一切正常,但是当我点击生成列表元素上,我得到的是“CURRENT_NODE没有定义”的错误。看起来,点击儿童时发现根变量不可用。

什么是错,我能做些什么来解决这个问题?

+1

您应该使用[闭包](http://jibbering.com/faq/notes/closures/)而不是'new Function',例如, 'aElement.onclick = function(event){changePage(index)};'。也就是说,我不认为问题在于你在这里展示的代码。 –

+0

我改为关闭。看起来更好。我也发现我的问题,我写了错误的ID,所以我的函数找不到current_node,因为它在之前崩溃了。 –

+0

http://jquery.com/可能是值得一试 – NimChimpsky

回答

0

你好,从你有没有你正在扼杀新功能的浏览器(overwriteing旧)

相反的:

aElement.onclick = new Function("changePage('" + index + "')"); 

你可以使用:

aElement.onclick = arguments.callee(index); 

“参数“是js中的一个关键字,它包含一个包含传递给函数的所有参数的对象(即参数[0]),还包含”被调用者“(函数本身)和”调用者“(从中调用函数)。第二个(调用者)不是跨浏览器的。

此致敬礼