Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery接受实时输入,然后模拟键入_Javascript_Jquery - Fatal编程技术网

Javascript jQuery接受实时输入,然后模拟键入

Javascript jQuery接受实时输入,然后模拟键入,javascript,jquery,Javascript,Jquery,我在用jQuery模拟实时键入时遇到了一些问题。我的Javascript如下(带有一个实时演示) 这应该等待一个名为test的文本字段的输入,一旦单击一个按钮,它应该清除该文本字段并模拟用户实时键入的字符。出于某种原因,我对setTimeout的调用只生成数组中的最后一个值 但是,如果我将Math.random设置为setTimeout中文本字段的值,而不是keystrokes[counter].value,它似乎每100毫秒更新一次。我到底做错了什么?我猜这和范围有关 编辑: 对不起,我不清楚

我在用jQuery模拟实时键入时遇到了一些问题。我的Javascript如下(带有一个实时演示)

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

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

编辑:

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

尝试此示例


在您的示例中,时间间隔还有其他问题。

这里有一些问题,有些与不必要的代码有关,有些与setTimeout的性质有关

首先,pushKeyStrokes()函数似乎不可靠;它每100毫秒检查一次?此外,它是不需要的,因为以后只要按下按钮就可以遍历输入提供的字符串,并且可以使用charAt来完成

其次,您在setTimeout函数中引用值“counter”,但在调用该函数时,计数器值将达到输入字符串的长度;在第一次调用character display函数之前,每次都会调用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);
    }

});
$(文档).ready(函数(){
var值=”;
$test=$(“#test”);
$(“#按钮”)。单击(函数(){
value=$test.val();
$test.val(“”);
对于(变量i=0;i

}))

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


我希望实际的输入是实时的。我知道你想做什么,正如我看到的解决方案一样,但这不涉及用户操作的延迟,即在键入下一个单词/char之前等待几秒钟。你希望延迟与用户相同吗?就像在用户阶段准确键入的每个字符一样?这可以通过以下方式完成:)或者只是将setTimeout时间增加为随机值
$(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);
    }

});