【发布时间】:2016-06-18 12:08:03
【问题描述】:
我正在尝试编写一个 javascript 程序,该程序在单击按钮时将输入元素中的值存储在数组中。该数组是拆分,每个单独的字母添加到一个 span 元素,然后附加到文档中。这个想法是使用 setTimeout 创建一个打字效果。
我在循环中创建闭包时遇到了问题,因此目前 setTimeout 函数总是返回迭代的最终值。
有问题的函数位于代码块的底部,名为 addTextToBoard();
var noteButton = document.querySelector('[data-js="button"]');
noteButton.addEventListener("click",function() {
var messageIn = document.querySelector('[data-js="input"]');
var message = messageIn.value;
postToBoard(message);
});
function postToBoard(val) {
var noteBoard = document.querySelector('[data-js="noteboard"]');
var newElement = document.createElement('div');
newElement.classList.add('noteboard__item');
noteBoard.appendChild(newElement);
setTimeout(function(){
newElement.classList.add('active');
}, 200);
addTextToBoard(newElement, val);
}
function addTextToBoard(el, val) {
var wordArray = val.split('');
for(i = 0; i < wordArray.length; i++) {
var letter = document.createElement('span');
letter.innerHTML = wordArray[i];
setTimeout(function(x){
return function() {}
el.appendChild(letter);
}(i),1000);
}
}
我相信我很接近,我只是没有完全理解创建闭包的语法。如果有人可以在正确的方向上戳戳,而不必给出完整的解决方案,那就太好了。
我基本上试图从here 粘贴以下代码 sn-p,但我在此过程中遗漏了一些东西!
setTimeout(function(x) { return function() { console.log(x); }; }(i), 1000*i);
最好的,
杰克
【问题讨论】:
-
也许this question 可以帮助您修复关闭问题
标签: javascript jquery closures frontend