Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 意外事件覆盖_Javascript_For Loop_Hyperlink_Event Handling_Dom Events - Fatal编程技术网

Javascript 意外事件覆盖

Javascript 意外事件覆盖,javascript,for-loop,hyperlink,event-handling,dom-events,Javascript,For Loop,Hyperlink,Event Handling,Dom Events,以下是我的代码(简化): 问题是每一行都有指向同一文档的链接,我不知道为什么 我的临时解决办法是: oLink.href = "javascript:void(0); var win = window.open ( \"" + oProfile_data [key]["url"] + "\", \"_blank\" ); win.focus();"; 这很好用。 我想这是一个压倒一切的问题,但我

以下是我的代码(简化):

问题是每一行都有指向同一文档的链接,我不知道为什么

我的临时解决办法是:

oLink.href = "javascript:void(0); var win = window.open ( \"" + oProfile_data [key]["url"] + "\", \"_blank\" ); win.focus();";
这很好用。 我想这是一个压倒一切的问题,但我可能错了


任何帮助都将不胜感激

这是一个可以通过理解闭包来解决的问题。您的匿名函数(绑定到click事件)在用户单击链接之前不会被调用,并且在执行此行时:

var win = window.open ( oProfile_data [key]["url"], "_blank" );
key
的值将由
FillTable
函数括起。因此,它将保留函数结束时的值(即它在循环中保留的最后一个值)

您必须为循环的每个迭代创建一个新的闭包。比如:

oLink.addEventListener ("click",
(function (k) {
    return function () {
       var win = window.open ( oProfile_data [k]["url"], "_blank" );
       win.focus();
    }
 }
)(key), false);
在上面,我们创建了一个函数,该函数返回一个打开窗口的函数。然后,我们将
key
的值传递给该函数,从而创建一个新的闭包

oLink.addEventListener ("click",
(function (k) {
    return function () {
       var win = window.open ( oProfile_data [k]["url"], "_blank" );
       win.focus();
    }
 }
)(key), false);