【问题标题】:How can I capture a data from the user while he/she is currently typing?如何在用户当前键入时从用户那里获取数据?
【发布时间】:2019-10-21 14:09:34
【问题描述】:

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

所以问题是,我如何在用户停止输入时捕获数据?就像我应该得到一个计时器然后呢?还是我应该创建一个条件,将每个单词存储在一个节点上?

【问题讨论】:

  • 你为什么使用Javascript Java标签?你会用什么技术来编写你的 UI?问题到底是什么,如何检测用户何时停止输入?
  • “Java 之于 JavaScript 就像 Ham 之于仓鼠”。 Java 和 JavaScript 是两个完全不同的东西。找出您使用的是哪一个和add some code。另外,go through the tour.

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


【解决方案1】:

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

这是一个简单概念证明。我并不为此感到自豪,但它应该足以让您入门。请注意,为了方便起见,我使用了 jQuery,但在 vanilla 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>

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多