JQuery UI自动完成防止退格搜索
当用户点击退格键时,将触发搜索。我怎样才能防止这种情况发生?我尝试了以下代码,但它似乎只有在第二次按下backspace键后才起作用JQuery UI自动完成防止退格搜索,jquery,jquery-ui,Jquery,Jquery Ui,当用户点击退格键时,将触发搜索。我怎样才能防止这种情况发生?我尝试了以下代码,但它似乎只有在第二次按下backspace键后才起作用 var $cached_input = $("#myinput"); $cached_input.autocomplete({ autoFocus: true, delay: 700, open: function (event, ui) { $(this).autocomplete("widget")
var $cached_input = $("#myinput");
$cached_input.autocomplete({
autoFocus: true,
delay: 700,
open: function (event, ui) {
$(this).autocomplete("widget")
.find("ui-menu-item-alternate")
.removeClass("ui-menu-item-alternate")
.end()
.find("li.ui-menu-item:odd a")
.addClass("ui-menu-item-alternate");
},
source: function (request, response) {
var params = { searchTerm: request.term }
//ajax call made here to load the data...
},
minLength: minChars
}).keydown(function (event) {
if (event.keyCode == 8) {
$cached_input.autocomplete("disable");
} else {
$cached_input.autocomplete("enable");
}
});
编辑
作为一种解决方法,我在每个注释旁边实现了以下更改,它似乎完成了这项工作。如果存在更好的解决方案,仍然可以接受
var $cached_input = $("#myinput");
var performSearch = true; //added variable to determine if I should search
$cached_input.autocomplete({
autoFocus: true,
delay: 700,
open: function (event, ui) {
$(this).autocomplete("widget")
.find("ui-menu-item-alternate")
.removeClass("ui-menu-item-alternate")
.end()
.find("li.ui-menu-item:odd a")
.addClass("ui-menu-item-alternate");
},
source: function (request, response) {
if (performSearch) { //check variable before performing search
var params = { searchTerm: request.term }
//ajax call made here to load the data...
}
},
minLength: minChars
}).keydown(function (event) {
if (event.keyCode == 8) {
performSearch = false; //do not perform the search
} else {
performSearch = true; //perform the search
}
});
var $cached_input = $("#myinput"); var performSearch = true; //added variable to determine if I should search
$cached_input.autocomplete({
autoFocus: true,
delay: 700,
open: function (event, ui) {
$(this).autocomplete("widget")
.find("ui-menu-item-alternate")
.removeClass("ui-menu-item-alternate")
.end()
.find("li.ui-menu-item:odd a")
.addClass("ui-menu-item-alternate");
},
source: function (request, response) {
if (performSearch) { //check variable before performing search
var params = { searchTerm: request.term }
//ajax call made here to load the data...
}
},
minLength: minChars }).keydown(function (event) {
if (event.keyCode == 8) {
performSearch = false; //do not perform the search
} else {
performSearch = true; //perform the search
} });
试试这个代码
$cached_input.autocomplete({
autoFocus: true,
delay: 700,
open: function (event, ui) {
$(this).autocomplete("widget")
.find("ui-menu-item-alternate")
.removeClass("ui-menu-item-alternate")
.end()
.find("li.ui-menu-item:odd a")
.addClass("ui-menu-item-alternate");
},
source: function (request, response) {
var params = { searchTerm: request.term }
//ajax call made here to load the data...
},
minLength: minChars
}).keyup(function (e) {
if (e.keyCode === 13) {
$cached_input.autocomplete("enable");
$cached_input.autocomplete("search", $cached_input.val());
}
else if ((e.keyCode == 8) || (this.value == "") || (e.keyCode == 46))
{
$cached_input.autocomplete("disable");
}
我愿意
$(document).on('keyup cut paste change keydown', 'input[data-input_type="autocomplete"]', function (e) {
$(this).autocomplete({
source: mySource();
}
通过这种方式,您可以控制在这种情况下触发自动完成的事件:keyup、cut、paste和keydown。其中data-input_type=autocomplete是输入的一个个人标记,仅表示它属于DOM元素的autocomplete组,但您可以通过类调用它,也可以根据需要调用它。希望这对某人有所帮助。作为一种解决方法,我在每个注释旁边实施了以下更改,似乎可以完成这项工作。如果存在更好的解决方案,仍然可以接受
var $cached_input = $("#myinput");
var performSearch = true; //added variable to determine if I should search
$cached_input.autocomplete({
autoFocus: true,
delay: 700,
open: function (event, ui) {
$(this).autocomplete("widget")
.find("ui-menu-item-alternate")
.removeClass("ui-menu-item-alternate")
.end()
.find("li.ui-menu-item:odd a")
.addClass("ui-menu-item-alternate");
},
source: function (request, response) {
if (performSearch) { //check variable before performing search
var params = { searchTerm: request.term }
//ajax call made here to load the data...
}
},
minLength: minChars
}).keydown(function (event) {
if (event.keyCode == 8) {
performSearch = false; //do not perform the search
} else {
performSearch = true; //perform the search
}
});
var $cached_input = $("#myinput"); var performSearch = true; //added variable to determine if I should search
$cached_input.autocomplete({
autoFocus: true,
delay: 700,
open: function (event, ui) {
$(this).autocomplete("widget")
.find("ui-menu-item-alternate")
.removeClass("ui-menu-item-alternate")
.end()
.find("li.ui-menu-item:odd a")
.addClass("ui-menu-item-alternate");
},
source: function (request, response) {
if (performSearch) { //check variable before performing search
var params = { searchTerm: request.term }
//ajax call made here to load the data...
}
},
minLength: minChars }).keydown(function (event) {
if (event.keyCode == 8) {
performSearch = false; //do not perform the search
} else {
performSearch = true; //perform the search
} });
是否有一个在选择时提交选项可能会将退格检测为选择?当我将您在问题中提供的逻辑合并时,我没有看到这种情况发生。你自己来看看:你确定你在问题中添加了所有相关代码吗?@杰克先生,我不确定我是否理解你的问题。有一个select事件,但当从菜单中选择某个项目时会触发,此时为时已晚。@dark knight在您提供的演示中不会发生此事件,因为我删除了加载源属性中数据的ajax调用。我没有提供该代码,因为我不认为它与手头的问题有关,因为当代码执行时已经太晚了。自动完成似乎是一个插件。它会自动提交搜索吗?当按下退格键时,它仍会执行搜索。此外,在按下我不想要的enter键之前,最初不会执行搜索。然后删除e.keyCode===13条件部分,仅使用keyCode==8部分,这将留下我已经尝试过的内容,即如果keyCode==8调用disable correct?,而不是keypress try.keyupfunctione{ife.keyCode==8$tags.autocomplete disable else$tags.autocomplete enable};与以前的行为相同。第一次执行搜索时,以及随后的所有时间都没有执行搜索。我已经用我发现的可能解决方案编辑了我的问题。