我有一个jquery的自动完成文本框,只需点击一下按钮,我就需要检查输入的值是来自自动完成还是一个全新的值。
问题是我的代码经常给我'警告(“不”)'...也许我不应该检查'缓存',而是其他什么?
//////////////////////////////////////////// autocomplete code //////////////////
var cache = {},
lastXhr;
$( "#inputV" ).autocomplete({
minLength: 2,
source: function( request, response ) {
var term = request.term;
if ( term in cache ) {
response( cache[ term ] );
return;
}
lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) {
cache[ term ] = data;
if ( xhr === lastXhr ) {
response( data );
}
});
}
});
////////////////////////// check if input comes from autocomplete //////////////////
$('#btn_check').click(function() {
var input = $("#inputV").val();
alert(input);
if ( input in cache )
{
alert("yes");
}
else
{
alert("no");
}
});
答案 0 :(得分:1)
//var cache = {} // doesnt make sense.. change it to:
var cache = []
...
//and change this to:
if ( $.inArray(input,cache) != -1 )
{
alert("yes");
}
else
{
alert("no");
}
答案 1 :(得分:1)
你可以试一下操作。 当焦点上的文本框时,您设置一个计数器“按键”。在每次按键时(向上和向下箭头按钮除外),您可以递增计数器。同时jquery自动完成将显示一些建议,并假设用户选择一个值,然后检查onchange事件上文本框文本的长度。
如果“keypress”计数器值小于文本的长度,那么它来自自动完成。
希望这适合你的情况。
答案 2 :(得分:1)
这就是我在我的一个项目中的表现
function lookup(inputString) {
$.post('/getSuggestions', {
queryString: ""+inputString+""
}, function(data){
if(data.length >0) {
$("#suggestions").show();
$("#autoSuggestionsList").html(data);
}
});
}
function fill(thisValue,thisID) {
$("#inputString").val(thisValue);
$("#id").val(thisID);
$("#suggestions").hide();
}
将fill()
函数附加到自动编译的返回结果的位置。因此,如果用户点击列表中的某个项目,则fill函数会使用此$("#id").val(thisID);
如果用户不使用列表中的建议,则不会填写“id”。在您的情况下,您可以添加一个名为/ id“isacutocomplate”的隐藏输入,将fill();
函数附加到自动转换返回的结果中,如果单击该项,您将更新“isacutocomplate”,否则您将不会填充。因此,当用户单击您的按钮时,您会检查“isacutocomplate”输入值,看看它是否来自autocomplate的列表。
希望对你有意义。如果没有,我可以提供整个过程。