难以在Javascript中开发独特的动态onclick事件

时间:2011-11-19 03:14:19

标签: javascript onclick

我正在使用与页面上的对象相关的大小合适的数据集,并且某些对象需要在其上单击应用链接。要连接的链接是数据集的一部分,我使用变量 linkTarget 为链接构建一个字符串,并像这样应用它。

 if (dataTag[i][3]==true){

    if(prepend==undefined || prepend=="undefined"){                         
        var linkTarget=ResultsJSON["targetUrl"];
        ele.onclick = function(){
            window.open(linkTarget);
        };
    } else {
        var linkTarget=prepend+ResultsJSON["targetUrl"];
        ele.onclick = function(){
            window.open(linkTarget);
        };
    }

ele指的是使用getElementByID拾取的元素。现在我正在经历相当多的对象,我遇到的问题是每个对象的onclick是linkTarget的最后一个值。这都包含在一个函数中,链接目标是一个局部变量,所以我不知道为什么。我尝试过使用类似

的数组
ele.onclick=function(){window.open(linkTarget[linkTarget.length-1]);};

甚至

ele.onclick=function(){window.open(linkTarget.valueOf());};

具有相同的结果。我现在感到茫然,不胜感激。

2 个答案:

答案 0 :(得分:3)

使用Array.forEach()来迭代您的数据并观察您的烦恼消失。

dataTag.forEach(function (item) {
    if (item[3]==true) {
        var linkTarget = "";
        if (prepend==undefined || prepend=="undefined") {
            linkTarget = prepend;
        }
        linkTarget += ResultsJSON.targetUrl;
        ele.onclick = function () {
            window.open(linkTarget);
        };
    }
});

有关在旧版浏览器中使用Array.forEach()的信息,请参阅此compatibility note

答案 1 :(得分:1)

你处于一个循环中 - 因此,你需要将你的东西放在另一个函数中,如下所示:

 if(dataTag[i][3]) {
    if(prepend) {   
        (function(linkTarget) {
            ele.onclick = function() {
                window.open(linkTarget);
            };
        })(ResultsJSON.targetUrl);
    } else {
        (function(linkTarget) {
            ele.onclick = function() {
                window.open(linkTarget);
            };
        })(ResultsJSON.targetUrl);
    }

我也做了一些一般的更正。