function getList()
{
var string2 = "<img src='close.png' onclick='removeContent(3)'></img>" + "<h4>Survey Findings</h4>";
string2 = string2 + "<p>The 15 Largest lochs in Scotland by area area...</p>";
document.getElementById("box3text").innerHTML = string2;
var myList = document.getElementById("testList");
for(i=0;i<lochName.length;i++)
{
if(i<3)
{
var listElement = "<a href='javascript:getLoch(i)'>" + "Loch "+ lochName[i] + "</a>";
var container = document.getElementById("testList");
var newListItem = document.createElement('li');
newListItem.innerHTML = listElement;
container.insertBefore(newListItem, container.lastChild);
}
else
{
var listElement = "Loch "+lochName[i];
var container = document.getElementById("testList");
var newListItem = document.createElement('li');
newListItem.innerHTML = listElement;
container.insertBefore(newListItem, container.lastChild);
}
}
}
此函数生成一个列表,其中前3个元素是超链接。单击时,它们应调用函数调用getLoch(i),其中i是列表中项目的位置。然而,当我传递它的值时,它只给它一个值15,数组的完整大小而不是位置。
function getLoch(Val) {
var str = "<img src='close.png' onclick='removeContent(4)'></img>" + "<h4>Loch " + lochName[Val] +"</h4>";
str = str + "<ul><li>Area:" + " " + area[Val] + " square miles</li>";
str = str + "<li>Max Depth:" + " " + maxDepth[Val] + " metres deep</li>";
str = str + "<li>County:" + " " + county[Val] + "</li></ul>";
document.getElementById("box4").innerHTML = str;
}
答案 0 :(得分:0)
据我所见,您的代码中有2个错误。第一个是你创建链接的方式。
var listElement = "<a href='javascript:getLoch(i)'>" + "Loch "+ lochName[i] + "</a>";
这实际上会产生如下代码:
<a href='javascript:getLoch(i)'>Loch name</a>
传递变量i
可能与您的意图不同,您希望它在您创建此链接时传递i
的值。这样做:
var listElement = "<a href='javascript:getLoch(" + i + ")'>" + "Loch "+ lochName[i] + "</a>";
那么为什么你的函数被调用值为15,列表的长度?在getList
函数中,您意外地使循环变量i
成为全局变量。它只是在循环头中缺少var
。
for(var i=0;i<lochName.length;i++)
循环完成后,i
具有最后一次迭代的值,即数组的长度减去1.通过使i
为全局,并使用链接中的javascript代码i
1}}作为参数,getLoch
始终以数组长度调用。