Javascript JQuery自动完成事件的新值
我有以下代码:Javascript JQuery自动完成事件的新值,javascript,jquery-ui,autocomplete,Javascript,Jquery Ui,Autocomplete,我有以下代码: container.autocomplete({ minLength: 2, source: function(request, response) { $.ajax({ type : 'POST', url: HOST + "/lib/gets/getjsonclients.php", dataT
container.autocomplete({
minLength: 2,
source: function(request, response) {
$.ajax({
type : 'POST',
url: HOST + "/lib/gets/getjsonclients.php",
dataType: "json",
data: {
q: request.term
},
success: function(data) {
ajaxCache[cachedTerm] = data;
response($.map(data, function(item) {
return {
label: item.value,
value: item.value
}
}));
}
});
},
select: function(event, ui) {
alert(ui.item.value);
this.close
},
//change: function(event, ui) {
// alert($(this).val());
//},
open: function() {
},
close: function() {
}
});
我想在键入一个新值时捕捉enter键事件,而不是我在选择列表中已有的值
我已尝试使用.result事件,但出现错误:Uncaught TypeError:对象没有使用以下代码的方法“result”:
container.result(function(event, data, formatted) {
alert($(this).val());
});
更改:事件工作正常,但只有在我失去对自动完成的关注并且需要在按下enter键时完成后才会触发
谢谢您的回答。您应该将容器绑定到按键上,并抓住未测试的enter键,但该键应该可以工作:
$(container).keypress(function(event) {
if(event.which == 13) {
$(this).autocomplete('search');
}
});
您应将容器绑定到按键,并捕获未测试的enter键,但应能工作:
$(container).keypress(function(event) {
if(event.which == 13) {
$(this).autocomplete('search');
}
});
我使用这个解决方案。
但是,如果有办法在一个事件被触发时取消该事件的效果,并再次激活该事件,请让我知道
var oneEventFired = false;
container.autocomplete({
minLength: 2,
source: function(request, response) {
$.ajax({
type : 'POST',
url: HOST + "/lib/gets/getjsonclients.php",
dataType: "json",
data: {
q: request.term
},
success: function(data) {
ajaxCache[cachedTerm] = data;
response($.map(data, function(item) {
return {
label: item.value,
value: item.value
}
}));
}
});
},
select: function(event, ui) {
oneEventFired = true;
alert(ui.item.value);
this.close
},
open: function() {
},
close: function() {
}
})
.keypress(function(e) {
if (!oneEventFired) {
// activate when the enter key is hit
if (e.keyCode === 13)
{
alert("key" + $(this).val());
}
} else {
oneEventFired = false;
}
});
谢谢你的帮助 我使用这个解决方案。
但是,如果有办法在一个事件被触发时取消该事件的效果,并再次激活该事件,请让我知道
var oneEventFired = false;
container.autocomplete({
minLength: 2,
source: function(request, response) {
$.ajax({
type : 'POST',
url: HOST + "/lib/gets/getjsonclients.php",
dataType: "json",
data: {
q: request.term
},
success: function(data) {
ajaxCache[cachedTerm] = data;
response($.map(data, function(item) {
return {
label: item.value,
value: item.value
}
}));
}
});
},
select: function(event, ui) {
oneEventFired = true;
alert(ui.item.value);
this.close
},
open: function() {
},
close: function() {
}
})
.keypress(function(e) {
if (!oneEventFired) {
// activate when the enter key is hit
if (e.keyCode === 13)
{
alert("key" + $(this).val());
}
} else {
oneEventFired = false;
}
});
谢谢你的帮助 谢谢,现在一切正常,但问题是,当我在选择列表中的一个值上按enter键时,会触发事件select,然后还会触发按键事件。在这种情况下,我只想解雇其中一人。你知道我怎样才能阻止他们中的一个吗?或者我可以使用一个局部变量来验证这一点。add after.autocomplete'search':event.stoppropagation我已经按照您所说的那样尝试过了,但不起作用。。。我已经读过StopperPagation,该方法停止向父元素冒泡事件,防止任何父处理程序收到事件通知。但是,我对autocomplete和keypress使用相同的容器,如下所示:。问题是我如何停止从同一容器中触发一个又一个事件,而不是从子或父html标记。我不认为有一种简单的方法可以做到这一点:你应该尝试重写你的js,考虑到这一需要,即改变你附加处理程序的方式。您可以尝试跟踪在按下enter键时是否调用了源函数,使用var enterKey=false,在按键处理程序中将其设置为true,在源函数中检查true,最后在源函数末尾将其设置为false。谢谢,现在可以了,但问题是,当我在选择列表中的一个值上按enter键时,会触发事件select,然后还会触发按键事件。在这种情况下,我只想解雇其中一人。你知道我怎样才能阻止他们中的一个吗?或者我可以使用一个局部变量来验证这一点。add after.autocomplete'search':event.stoppropagation我已经按照您所说的那样尝试过了,但不起作用。。。我已经读过StopperPagation,该方法停止向父元素冒泡事件,防止任何父处理程序收到事件通知。但是,我对autocomplete和keypress使用相同的容器,如下所示:。问题是我如何停止从同一容器中触发一个又一个事件,而不是从子或父html标记。我不认为有一种简单的方法可以做到这一点:你应该尝试重写你的js,考虑到这一需要,即改变你附加处理程序的方式。您可以尝试跟踪在按下enter键时是否调用了源函数,使用var enterKey=false,在按键处理程序中将其设置为true,在源函数中检查true,最后在源函数末尾将其设置为false。