Jquery 如何从自动完成中签入输入的值?

Jquery 如何从自动完成中签入输入的值?,jquery,Jquery,我有一个jquery的autocomplete文本框,点击一个按钮,我需要检查输入的值是来自autocomplete还是一个全新的值 问题是我的代码不断地给我“警告”(“否”)。。。也许我不应该检查“缓存”,但还有别的吗 //////////////////////////////////////////// autocomplete code ////////////////// var cache = {}, lastXhr; $( "

我有一个jquery的autocomplete文本框,点击一个按钮,我需要检查输入的值是来自autocomplete还是一个全新的值

问题是我的代码不断地给我“警告”(“否”)。。。也许我不应该检查“缓存”,但还有别的吗

//////////////////////////////////////////// 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");
                }   
        });

您可以尝试一些操作。 当文本框处于聚焦状态时,设置计数器“按键”。每次按键(向上和向下箭头按钮除外)都会增加计数器。同时,jqueryautocomplete将显示一些建议,并假设如果用户选择了一个值,那么您将在onchange事件上检查文本框的文本长度

若“按键”计数器值小于文本长度,那个么它来自自动完成


希望这适合您的情况。

您可以尝试一些操作。 当文本框处于聚焦状态时,设置计数器“按键”。每次按键(向上和向下箭头按钮除外)都会增加计数器。同时,jqueryautocomplete将显示一些建议,并假设如果用户选择了一个值,那么您将在onchange事件上检查文本框的文本长度

若“按键”计数器值小于文本长度,那个么它来自自动完成


希望这适合你的情况。

这就是我在我的一个项目中所做的

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函数将使用this
$(“#id”).val(thisID)设置id为“id”的MyHTML元素中的值

简单地说,如果用户不使用列表中的建议,则不会填写“id”。在您的情况下,您可以添加一个名为/id“isacutocomplate”的隐藏输入,attach
fill()函数返回到从自动编译返回的结果,如果单击该项,您将更新“isacutocomplate”,否则您将不会填充它。所以,当用户单击按钮时,检查“isacutocomplate”输入值,然后查看它是否来自autocomplate的列表


希望这对你有意义。如果没有,我可以提供整个过程。

这就是我在我的项目中如何做到的

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函数将使用this
$(“#id”).val(thisID)设置id为“id”的MyHTML元素中的值

简单地说,如果用户不使用列表中的建议,则不会填写“id”。在您的情况下,您可以添加一个名为/id“isacutocomplate”的隐藏输入,attach
fill()函数返回到从自动编译返回的结果,如果单击该项,您将更新“isacutocomplate”,否则您将不会填充它。所以,当用户单击按钮时,检查“isacutocomplate”输入值,然后查看它是否来自autocomplate的列表


希望这对你有意义。如果没有,我可以提供整个流程。

在任何情况下都会给出“否”:(也许我不应该检查'cache',但还有别的什么?你能给我一些存储在
input
cache
中的示例数据吗?例如
console.log('input='+input+',cache='+cache)
。我相信你是在用firebug调试这个问题吗?input=Black-necked Grebe,cache=[object]-可能此“对象”的格式不同?是的。请下载firebug并使用
console.log(cache)
写出缓存的内容。请仅在
console.log(cache)
上获取它。它将为您提供更详细的信息。在任何情况下仍然给出“否”:(也许我不应该检查'cache',但还有别的什么?你能给我一些存储在
input
cache
中的示例数据吗?例如
console.log('input='+input+',cache='+cache)
。我相信你是在用firebug调试这个问题吗?input=Black-necked Grebe,cache=[object]-可能此“对象”的格式不同?是的。请下载firebug并使用
console.log(cache)
写出缓存的内容。请仅在
console.log(cache)
获取它。它将为您提供更详细的信息。