我是一名初学者JavaScript程序员。我正在尝试创建与Lightbox 2类似的东西,但是要简单得多。我想自己从头开始做的唯一原因是我可以学习。但是,我一直停留在显示图像的最后一个关键部分。我认为问题出在我试图使用onclick并分配给匿名函数的地方: elem [i] .onclick = function(){liteBoxFocus(imgSource,imgTitle);返回false;}; 。如果您运行我的代码并尝试点击Google徽标,则会显示yahoo徽标和标题,而不是Google的徽标和标题。但是,当您单击yahoo徽标时,它可以正常工作,因此,匿名函数似乎仅在最后一个循环中有效。提前致谢!!!为了方便起见,我将整个CSS/JS/XHTML放在一页中。 最佳答案 您的事件处理程序会形成一个闭包,该闭包会记住指向封闭范围内变量的“事件”指针。因此,当它们实际执行时,它们的最后一个值是imgSource和imgTitle。相反,您可以使用此模式来本地化变量值。每次调用时,都会在getClickHandler中创建源和标题的副本。因此,返回的函数会记住该循环迭代中的值。//Check those anchors with rel=liteboxfor(i = 0;i < elem.length;i++){ if(elem[i].rel == "litebox"){ imgSource = elem[i].href.toString(); imgTitle = elem[i].title; elem[i].childNodes[0].style.border="0px solid #fff"; elem[i].onclick = getClickHandler(imgSource, imgTitle); }}//Brings up the image with focusfunction getClickHandler(source,title){ return function() { document.getElementById("liteBox").style.display = "block"; document.getElementById("liteBox").innerHTML = "<h1>" + title + "</h1>" + "<img src='" + source + "'/><br />" + "<a href='#' onclick='liteBoxClose();'><img src='images/litebox_close.gif' border='0' alt='close'/></a>"; document.getElementById("liteBoxBg").style.display = "block"; }}