Javascript Jquery在粘贴文本时就好像它是键入的一样

Javascript Jquery在粘贴文本时就好像它是键入的一样,javascript,jquery,events,autocomplete,paste,Javascript,Jquery,Events,Autocomplete,Paste,堆垛机。我正在开发一个自动完成应用程序,它需要一个字符一个字符地捕获输入文本,目前我正在使用jquery收听“输入”事件 我面临的问题是粘贴文本,因为函数是用整个输入值触发的,如下所示: 粘贴值=“演示” 但是,我希望实现的是将粘贴的值分解为实际键入的值,并触发函数4次,如下所示: 粘贴值=“演示” 你们能给我一些关于如何用vanilla JS或Jquery解决这个问题的提示或指导吗 提前感谢。尝试以下方法: <input type="text"> <div></d

堆垛机。我正在开发一个自动完成应用程序,它需要一个字符一个字符地捕获输入文本,目前我正在使用jquery收听“输入”事件

我面临的问题是粘贴文本,因为函数是用整个输入值触发的,如下所示:

粘贴值=“演示”

但是,我希望实现的是将粘贴的值分解为实际键入的值,并触发函数4次,如下所示:

粘贴值=“演示”

你们能给我一些关于如何用vanilla JS或Jquery解决这个问题的提示或指导吗


提前感谢。

尝试以下方法:

<input type="text">
<div></div>

<script> 
  var myInput = $("input");
  var value = ''; //to store previous input value

  myInput.on('input', function () {
    var current = myInput.val();
    var dif = current.replace(value, '');
    if(dif.length) {
      var out = value;
      for(var i = 0; i < dif.length; i++) {
        out += dif.substr(i, 1);
        output(out);
      }
    }
    value = current;
  });

  function output(text) {
    console.log(text);
    $("div").text(text);
    // here you can even to re-set input value via myInput.val
  }
</script>

var myInput=$(“输入”);
var值=“”//存储以前的输入值
myInput.on('input',函数(){
var current=myInput.val();
var dif=当前。替换(值“”);
if(dif.长度){
var out=价值;
对于(变量i=0;i
尝试输入“1”、“2”、“345”,您将在控制台日志中获得“1”、“12”、“123”、“1234”、“12345”

只有在将文本附加到输入的末尾时,这种方法才有效。如果您不仅需要在输入端插入文本,还需要更新程序


另请参见。

我认为您可以在将输入显示到屏幕之前检查输入的长度

我已经在使用它,但是我需要在触发oninput之前捕获粘贴的文本。我目前正试图通过阻止onpaste事件的默认行为来解决此问题,以便将其与oninput触发器分开。@moy2010我更新了答案并提供了解决方案草稿。它并没有涵盖所有的案例,但想法应该足够清晰。
output
方法将根据输入中的每个符号调用,无论它是如何添加的(一个接一个或分组)。感谢您的帮助,dhilt!for循环返回的“out”变量实际上满足了我的要求,但出于某种原因,typeWatch插件无法识别输入字段值中的更改(我正在用“out”的内容填充字段值)。我将不得不继续尝试并从您的示例代码中学习。祝你周末愉快。
input.val() = "d"
input.val() = "de"
input.val() = "dem"
input.val() = "demo"
<input type="text">
<div></div>

<script> 
  var myInput = $("input");
  var value = ''; //to store previous input value

  myInput.on('input', function () {
    var current = myInput.val();
    var dif = current.replace(value, '');
    if(dif.length) {
      var out = value;
      for(var i = 0; i < dif.length; i++) {
        out += dif.substr(i, 1);
        output(out);
      }
    }
    value = current;
  });

  function output(text) {
    console.log(text);
    $("div").text(text);
    // here you can even to re-set input value via myInput.val
  }
</script>