我正在使用与页面上的对象相关的大小合适的数据集,并且某些对象需要在其上单击应用链接。要连接的链接是数据集的一部分,我使用变量 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());};
具有相同的结果。我现在感到茫然,不胜感激。
答案 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);
}
我也做了一些一般的更正。