使用列表位置作为函数的参数来拉取某些数据

时间:2011-02-12 20:13:49

标签: javascript

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;


}

1 个答案:

答案 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始终以数组长度调用。