0

我在使用 jQuery 模拟实时输入时遇到了一些问题。我的 Javascript 如下(这里有一个现场演示)。

$(document).ready(function () {
    var keystrokes = [];
    var value = "";
    var counter = 0;
    window.setInterval(pushKeystrokes, 100);
    function pushKeystrokes() {
        keystrokes.push({
            value: value
        });
    }
    $("#test").keyup(function () {
        value = $(this).val();
    });
    $("#button").click(function () {
        $("#test").val("");
        $.each(keystrokes, function () {
            window.setTimeout(function () {
                $("#test").val(keystrokes[counter].value);
            }, 100 * counter);
            counter++;
        });
    });
});

这应该等待输入到名为 的文本字段test,并且一旦单击按钮,它应该清除该文本字段并模拟输入用户实时键入的字符。出于某种原因,我的调用setTimeout只产生数组中的最后一个值。

但是,如果我在而不是设置Math.random为文本字段的值,它似乎应该每 100 毫秒更新一次。我到底做错了什么?我猜这与范围有关。setTimeoutkeystrokes[counter].value

编辑:

对不起,我不清楚。我想保留用户操作的延迟,即在输入前等待几秒钟,以不同的速度输入单词等。这仍然可能吗?

4

3 回答 3

1

我已经编辑了您在 JSBin 中发布的代码,在这里和那里修改了一些内容。重写脚本背后的逻辑以注释的形式添加。

这是一个例子

于 2013-11-10T23:42:35.093 回答
0

您在这里遇到了一些问题,有些与不必要的代码有关,有些与 setTimeout 的性质有关

首先 pushKeyStrokes() 函数看起来很狡猾;它仅每 100 毫秒检查一次?此外,它不是必需的,因为稍后您可以在按下按钮后浏览输入提供的字符串,您可以使用 charAt 来完成。

其次,您指的是 setTimeout 函数中的值“计数器”,但是当调用该函数时,计数器值将达到输入字符串的长度;在第一次调用字符显示函数之前,counter++ 就已经被调用了!

无论如何,我修改了你的 JS Bin;希望这是有道理的,如果您有任何问题,请告诉我:

$(document).ready(function() {

  var value = "";
  $test = $("#test");

  $("#button").click(function() {

    value = $test.val();
    $test.val("");

    for (var i = 0; i < value.length; i++)
    {
       window.setTimeout(addChar, 100 * i, value.charAt(i));
    }

    function addChar(char)
    {
      $test.val($test.val() + char);
    }

});

});

于 2013-11-10T23:31:38.380 回答
0

试试这个例子http://jsbin.com/eVOcOku/4/

在您的示例中,您对 timeInterval 有其他问题。

于 2013-11-10T23:28:34.547 回答