匿名函数绑定到当前变量而不是初始变量

时间:2017-07-07 13:38:42

标签: javascript anonymous-function

修改:有人建议我的问题是duplicate of another。然而,他们最终将他们的解决方案存储在全局阵列中,而我不是。我试图让闭包自己工作。从其他例子来看,它看起来应该很容易,但由于某种原因,它不会聚集在一起,我必须错过一些东西。

我正在开设一个网页,以帮助玩家跟踪第三方规则集中的操作,该规则集称为“战争之路的寻路者”。

在这个阶段,我试图做的是我有两个列表(基于to do list),当你从一个列表中删除一个项目时,它将出现在另一个列表中。这就是我计划如何展示对消耗动作的可用演习。目前我只使用字符串,但最终计划使用包含更多信息的对象。

所以我目前有两个列表,我可以在它们之间发送元素。但是行为不正确。最后创建的元素(在本例中为字符串“forth”)被覆盖在“第一”,“第二”和“第三”字符串上。我确定这样做的原因是因为匿名函数正在使用变量,而最后一次使用该变量时,这就解释了为什么该值被覆盖了。另一个问题是它并不总是出现在正确的列表中。

我尝试过绑定并创建新的局部变量,这会导致它停止工作或没有变化。我完全有可能误用它们。

那么如何创建匿名函数来存储激活时使用的原始值?

// Create a "close" button and append it to each list item
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
var span = document.createElement("SPAN");
var txt = document.createTextNode("\u00D7");
span.className = "close";
span.appendChild(txt);
myNodelist[i].appendChild(span);
}

// Click on a close button to hide the current list item
var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
close[i].onclick = function() {
var div = this.parentElement;
div.style.display = "none";
}
}

function falseElement(newfe) 
{
var li = document.createElement("li");
var inputValue = newfe; //document.getElementById("myInput").value;
var t = document.createTextNode(inputValue);
li.appendChild(t);
document.getElementById("myUL").appendChild(li);

var span = document.createElement("SPAN");
var txt = document.createTextNode("\u00D7");
span.className = "close";
span.appendChild(txt);
li.appendChild(span);

for (i = 0; i < close.length; i++) {
close[i].onclick = function() {
//anonymous function is the name of this type of function https://www.w3schools.com/js/js_function_definition.asp
secondelement(newfe);
var div = this.parentElement;
div.style.display = "none";
}
}
}
function secondelement(newe)
{
 var li = document.createElement("li");
 var inputValue = newe; //document.getElementById("myInput").value;
 var t = document.createTextNode(inputValue);
 li.appendChild(t);
 document.getElementById("expended").appendChild(li);

 var span = document.createElement("SPAN");
 var txt = document.createTextNode("\u00D7");
 span.className = "close";
 span.appendChild(txt);
 li.appendChild(span);

 for (i = 0; i < close.length; i++) {
 close[i].onclick = function() {
  falseElement(newe);
 var div = this.parentElement;
  div.style.display = "none";
 }
  }
 }

falseElement("first");
falseElement("second");
secondelement("third");
secondelement("forth");
<!DOCTYPE html>
<html>
<head></head>
<body>
<ul id="myUL">
</ul>
<p id="divider"><br><br></p>
<ul id="expended">
</ul>
</body>
</html>

0 个答案:

没有答案