javascript - 单击事件监听器仅在第二次工作

标签 javascript html jquery events jquery-events

这几行代码假设像一个搜索算法一样工作,它也建议关键字。单击应该将单词放入输入文本框中的关键字。可以作为结果的词有:"first", "second"。

问题是它在第二次单击之前不起作用。

var database = ["first", "second"];

var founded = true;

$( '#list' ).on( 'click', '.list_elem', function() {
  $("#box").val(this.textContent);
  $("#list").empty();
});

$("#box").on("change paste keyup", function() {
  $("#list").empty();
  var inputText = $(this).val();
  if (inputText.length != 0)
  {
      for (var i = 0; i < database.length; i++) {
          founded = true;
          for (var j = 0; j < inputText.length; j++) {
              if(!(database[i][j].toLowerCase() == inputText[j].toLowerCase()))
              {
                 founded = false;
              }
          }
          if(founded)
          {
              $( "#list" ).append('<div class="list_elem">' + database[i]  + '</div>');
          }
      }
  }
});
<input type="text" id="box">
<div id="list"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

最佳答案

这发生在 <input>失去焦点并发出 change 事件,您的代码将运行清空 #list但紧随其后的是 keyup它重新填充它。你可以使用 input 事件代替 changekeyup解决这个问题:

$("#box").on("input paste", function() { ...

var database = ["first", "second"];

var founded = true;

$('#list').on('click', '.list_elem', function() {
  $("#box").val(this.textContent);
  $("#list").empty();
});

$("#box").on("input paste", function() {
  $("#list").empty();
  var inputText = $(this).val();
  if (inputText.length != 0) {
    for (var i = 0; i < database.length; i++) {
      founded = true;
      for (var j = 0; j < inputText.length; j++) {
        if (!(database[i][j].toLowerCase() == inputText[j].toLowerCase())) {
          founded = false;
        }
      }
      if (founded) {
        $("#list").append('<div class="list_elem">' + database[i] + '</div>');
      }
    }
  }
});
<input type="text" id="box">
<div id="list"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

关于javascript - 单击事件监听器仅在第二次工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47972324/

相关文章:

javascript - 对象到数组(数组的数组)

Javascript:使用函数附加子项:FireFox 与 Chrome

javascript - 如何在图像上滑动切换文本?

javascript - 将 Canvas 分成几 block

javascript - 如何计算屏幕外有多少元素?

javascript - 如何使用 angularJS $routeProvider 和 $routeParams

javascript - 从现有的 JSON 对象数组创建一个空的 JSON 对象

html - Firefox 不支持背景图像转换?

css - IE 7 DIV 右移

在下拉列表中选择项目时,jQuery 在 IE 中不起作用