更新for循环中的值/重置for循环?

时间:2019-11-15 20:23:56

标签: javascript loops for-loop

我正在做我的第一个学校项目,所以我在做此类Web应用程序方面没有太多经验,这就是为什么我决定在这里询问。

如何更新for循环语法中的值或将其完全重置,使其再次迭代,就像我刚刚重新加载它一样?我有一个我决定不显示的功能,仅仅是因为它没有用。最后,它所做的是将taskCount.length加1。从技术上讲这部分有效,但是问题是,现在要向您展示的功能一旦迭代,将始终保持默认的taskCount.length值,一旦页面被加载,它就永远不会在那里改变。有什么办法可以更新吗?

这里有个例子:上面的函数生成taskCount.length = '5',但是当页面启动时它是taskCount.length = 4,而当我从控制台执行alert(taskCount.length)时,得到5。但是for循环不想改变。

for (var i = 0; i < taskCount.length; i++) {    
            document.getElementsByClassName('task')[i].addEventListener('click', ((j) => {         
                return function() {
                    var shadow = document.createElement('div');
                    // Styling
                    var changingWindow = document.createElement('div');
                    // Styling
                    var changingTitle = document.createElement('p');
                    // Styling
                    var changingText = document.createElement('p');
                    // Styling
                    var changingTitleNode = document.createTextNode('Промяна');
                    var changingTextNode = document.createTextNode('Моля, изберете действие.');
                    var deleteTask = document.createElement('button');
                    var goUp = document.createElement('button');
                    var goDown = document.createElement('button');
                    var unchange = document.createElement('button');
                    // Styling
                    var deleteElementNode = document.createTextNode('Премахни задачата');
                    var goUpNode = document.createTextNode('Премести нагоре');
                    var goDownNode = document.createTextNode('Премести надолу');
                    var unchangeNode = document.createTextNode('Отказ');
                    var justBreak = document.createElement('br');
                    var justBreakAgain = document.createElement('br');
                    var justBreakOneMoreTime = document.createElement('br');
                    body.appendChild(shadow);
                    shadow.appendChild(changingWindow);
                    changingWindow.appendChild(changingTitle);
                    changingTitle.appendChild(changingTitleNode);
                    changingWindow.appendChild(changingText);
                    changingText.appendChild(changingTextNode);
                    changingWindow.appendChild(deleteTask);
                    deleteTask.appendChild(deleteElementNode);
                    deleteTask.onclick = function() {
                        document.getElementsByClassName('task')[j].parentNode.removeChild(document.getElementsByClassName('task')[j]);
                        shadow.parentNode.removeChild(shadow);
                        localStorage.setItem("listContent", document.getElementById('list').innerHTML);
                    }
                    changingWindow.appendChild(justBreak);
                    changingWindow.appendChild(goUp);
                    goUp.appendChild(goUpNode);
                    goUp.onclick = function() {
                        if (j !== 0) {
                            var saveThisTaskValue = document.getElementsByClassName('task')[j].innerHTML;
                            var savePreviousTaskValue = document.getElementsByClassName('task')[j - 1].innerHTML;
                            document.getElementsByClassName('task')[j].innerHTML = savePreviousTaskValue;
                            document.getElementsByClassName('task')[j - 1].innerHTML = saveThisTaskValue;
                        }
                        shadow.parentNode.removeChild(shadow);
                        localStorage.setItem("listContent", document.getElementById('list').innerHTML);
                    }
                    changingWindow.appendChild(justBreakAgain);
                    changingWindow.appendChild(goDown);
                    goDown.appendChild(goDownNode);
                    goDown.onclick = function() {
                        if (j !== document.getElementsByClassName('task').length - 1) {
                            var saveThisTaskValue = document.getElementsByClassName('task')[j].innerHTML;
                            var saveNextTaskValue = document.getElementsByClassName('task')[j + 1].innerHTML;
                            document.getElementsByClassName('task')[j].innerHTML = saveNextTaskValue;
                            document.getElementsByClassName('task')[j + 1].innerHTML = saveThisTaskValue;
                        }
                        shadow.parentNode.removeChild(shadow);
                        localStorage.setItem("listContent", document.getElementById('list').innerHTML);
                    }
                    changingWindow.appendChild(justBreakOneMoreTime);
                    changingWindow.appendChild(unchange);
                    unchange.appendChild(unchangeNode);
                    unchange.onclick = function() {
                        shadow.parentNode.removeChild(shadow);
                    }
                }
            })(i))
        }

3 个答案:

答案 0 :(得分:1)

对于页面重新加载,您始终可以将值另存为cookie并一次又一次地重复使用。您可以随时更新它。

答案 1 :(得分:1)

我不太了解您的问题,但是也许您需要一些递归。类似于:

loop(5);

function loop(xTimes) {

   for (var i = 0; i < xTimes; i++) {

        if (newXTimes !== xTimes) {

            loop(newXtimes);
            break;
        }
   }

}

也许将newxTimes设置为可以在循环内访问的全局变量。

答案 2 :(得分:0)

以防万一“未来的人”读了这个问题并且没有任何答案,我想出了一个解决方案,每当您更改值时就重新加载页面。尽管如此,我还是希望不重新加载就可以做到。