在他/她当前正在输入时,如何从用户那里捕获数据?

时间:2019-10-21 14:09:34

标签: javascript java linked-list stack undo-redo

我正在创建一个程序,该程序将使用堆栈作为数据结构。该程序的主要功能是“重做”和“撤消”。用户将在GUI上键入任何内容,并且将有两个按钮,即重做和撤消。我想将每个单词存储在特定的节点上,以便每当用户按下撤消时,将应用文本框的先前状态。

问题是,每当用户停止键入时如何捕获数据?我应该得到一个计时器吗?还是应该创建一个条件,将每个单词存储在节点上?

1 个答案:

答案 0 :(得分:0)

您可以使用setTimeout创建一个简单的防抖动,以便仅在无输入x毫秒后记录状态。状态可以只存储在数组中。将pop()项从中删除以进行撤消。

这是一个简单概念证明。我对此并不感到骄傲,但足以让您入门。请注意,为方便起见,我使用了jQuery,但在原始JS中执行相同操作相当简单。

$(function() {

  var debounce = null, //ref for debouncer timeout     
      $textarea = $("#myTextarea"),
      $undo = $("#undo"),
      $undocount = $("#undo span"),
      history = [];

  $textarea.on("keyup", function() {
      clearTimeout(debounce); //clear the debounce
      debounce = setTimeout(function() {
        history.push($textarea.val());
        $undocount.text(history.length);
      }, 300);
  }).on("blur", function() {
      history.pop();
  });

  $undo.on("click", function() {
    $undocount.text(history.length);
    $textarea.val(history.pop());
  })

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="myTextarea"></textarea>
<button id="undo">UNDO [<span>0</span>]</button>