Google脚本:Javascript函数window.open在某些情况下无效

时间:2018-05-23 21:13:59

标签: javascript google-apps-script

我正在使用Google Scripts。

我目前有一个脚本,如果你点击一个框,它应该打开一个带有从电子表格中绘制的URL的新标签。

脚本正确地提取正确的URL:

var url = mainObj[i].link;

以下脚本会打开正确的网址。

arr[i].onclick = function open() {window.open("https://drive.google.com/drive/my-drive", "_blank") }; 

因此,如果我将URL硬编码到我的脚本中,则window.open似乎正常工作。但是,我从电子表格中提取数据,因此我使用for循环迭代此函数。

所以,如果我尝试这样做:

arr[i].onclick = function open() {window.open(mainObj[i].link, "_blank") };

甚至

var url = mainObj[i].link;
arr[i].onclick = function open() {window.open(url, "_blank") };

...两种情况都给我400错误。有什么不同?

编辑:我认为这是因为目前变量url没有双引号,但是当我执行以下操作时,错误仍然存​​在。

var url = '"' + mainObj[i].link + '"';
console.log(url);
arr[i].onclick = function open() {window.open(url, "_blank") };

1 个答案:

答案 0 :(得分:1)

如果你处于循环中,当你在onclick函数中设置它时,“i”索引不会保存,你需要将它封装在一个匿名函数中并将“i”传递给这个函数

for(var i = 0; i < arr.length; i++){
    (function(i){
        arr[i].onclick = function open() {window.open(mainObj[i].link, "_blank") };
   })(i);
}

你可以在这里看到一个例子,第一个功能所有的按钮都是相同的onclick,secodn是固定的: https://jsfiddle.net/angelmarde/5gegt2o6/