【问题标题】:javascript: creating an undo with an array - difficulty navigating the arrayjavascript:使用数组创建撤消 - 导航数组的困难
【发布时间】:2023-10-01 01:24:01
【问题描述】:

我正在尝试在文本区域中创建一个撤消功能,因为我发现 IE 上的“必须在工作中使用它”的本机功能缺失。

这个想法是在用户按下空格键、退格键、删除键或右键单击鼠标的任何时候推送到数组。我遇到问题的地方是使用 Z 键浏览数组“历史”。我在想,如果每次按下 Z 键时我都会增加一个计数器,然后从 array.length 中减去它,这将允许我浏览历史记录。

这是我为测试 http://jsfiddle.net/synthet1c/5fqe3/2/ 制作的 JSFiddle

这是我遇到问题的脚本部分

//keypress listener script

var pos = undo.length - 1

if(key_code == "90"){
var counter = 0
counter++;
var newCount = pos - counter;
e.preventDefault();
id("myTextarea").value = undo[newCount] + " ";
id('counter').innerHTML = counter;

}

此外,在按空格键以节省内存时仅将最后一个单词推入数组的任何想法都会很棒。

【问题讨论】:

  • IE 有一个用于 TEXTAREA 的本机“撤消”?
  • 我相信Stack 会比数组更好(即你可以使用 Array.push()Array.pop() ) More reading here
  • @jahroy 我不明白你为什么要使用Stack 数据结构......它所做的只是限制了数组上的方法。只是不要使用任何其他方法,它没有什么不同!
  • @Ian - 很公平......我实际上并没有仔细阅读页面(我的错)。我只是想如果它是一个新概念,它将解释堆栈的概念。我的主要观点只是使用 push()pop() 来维护撤消堆栈。
  • @jahroy 没问题,我认为这是一个很好的观点,我同意它们可以用来使这个程序工作,只是可以更好地解释:)

标签: javascript arrays textarea counter undo


【解决方案1】:

好吧,每次按键你都会用var counter = 0将你的计数器重置为0,如果你想增加计数器,你应该在按键事件之外声明你的var counter = 0;。操作后也增加计数器

http://jsfiddle.net/roine/5fqe3/4/

【讨论】:

  • 感谢您的回复,我知道这将是一些基本的东西......虽然我确实尝试全局设置计数器,然后在按键功能的外部使用闭包..但我一定做错了,所以必须回去学习基础知识。再次感谢
【解决方案2】:

编写自己的撤消工具是一个很好的练习,但您可能还需要考虑现有的解决方案,例如 * article 中提到的那些解决方案

【讨论】: