如何签入输入的值来自自动完成?

时间:2011-05-31 07:52:14

标签: jquery

我有一个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");
                }   
        });

enter image description here

3 个答案:

答案 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);

在我的html元素中设置ID为“id”的值

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

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