单击事件侦听器仅在第二次工作
Click event listener works just on the second time
这几行代码假设像搜索算法一样工作,它也建议关键字。单击应该将单词放入输入文本框中的关键字。可以作为结果的词如下:"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有焦点,第一次点击让input失去焦点。第二次点击实际上触发了 onClick();
我能想到的最简单的解决方案是在鼠标进入列表时移除焦点。 Here 是 link 到 jQuery 的 mouseenter() 函数。
当 <input>
失去焦点并发出 change 事件时会发生这种情况,您的代码会清空 #list
但在 keyup
之后立即重新填充它。您可以使用 input
事件代替 change
和 keyup
来解决此问题:
$("#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>
这几行代码假设像搜索算法一样工作,它也建议关键字。单击应该将单词放入输入文本框中的关键字。可以作为结果的词如下:"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有焦点,第一次点击让input失去焦点。第二次点击实际上触发了 onClick(); 我能想到的最简单的解决方案是在鼠标进入列表时移除焦点。 Here 是 link 到 jQuery 的 mouseenter() 函数。
当 <input>
失去焦点并发出 change 事件时会发生这种情况,您的代码会清空 #list
但在 keyup
之后立即重新填充它。您可以使用 input
事件代替 change
和 keyup
来解决此问题:
$("#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>