jQuery自动完成vs组合框

jQuery自动完成vs组合框,jquery,jquery-autocomplete,Jquery,Jquery Autocomplete,我调用一个web服务(使用SPServices)将我的所有项目放入一个数组,然后在我的自动完成调用中使用该数组。它工作得很好,但是我有几个问题 如何拒绝用户选择不在拾取列表中的值?我认为组合框可以做到这一点,但是我不想将整个列表加载到页面上。。。这导致了#2 我使用的是一个选择器列表,其中包含数千项(目前为几百项),从我使用autocomplete收集的内容中,它将所有选择值加载到一个数组中,然后使用该数组进行拾取。对吗?有没有更好的方法来解决这个问题,这样我就可以使用部分输入的单词调用web服

我调用一个web服务(使用SPServices)将我的所有项目放入一个数组,然后在我的自动完成调用中使用该数组。它工作得很好,但是我有几个问题

  • 如何拒绝用户选择不在拾取列表中的值?我认为组合框可以做到这一点,但是我不想将整个列表加载到页面上。。。这导致了#2

  • 我使用的是一个选择器列表,其中包含数千项(目前为几百项),从我使用autocomplete收集的内容中,它将所有选择值加载到一个数组中,然后使用该数组进行拾取。对吗?有没有更好的方法来解决这个问题,这样我就可以使用部分输入的单词调用web服务,并且只对结果进行数组,而不是对所有项目进行数组?这是自动完成或组合框之外的唯一解决方案吗

  • 谢谢,
    大卫,这就是我所做的

    在键启动时,使用新术语调用我的web服务,然后将返回的结果放入自动完成。结果也会被缓存

    我还将在用户继续操作时检查指定的值是否包含在数组中,以确保它们没有弄乱该值

    function setVendorLookup() {
        var term = $(this).val().toLowerCase();
        if (term.length > 2) {
            if (vendors.join(" ").toLowerCase().indexOf(term) == -1) { //some caching
                vendors = [];
                $().SPServices({
                    operation: "GetListItems",
                    listName: "Yellow Pages",
                    async: false,
                    CAMLViewFields: "<ViewFields><FieldRef Name='VENDOR_ID'/><FieldRef Name='NAME1'/><FieldRef Name='CITY'/><FieldRef Name='STATE'/></ViewFields>",
                    CAMLQuery: "<Query><Where><Or><Contains><FieldRef Name='VENDOR_ID' /><Value Type='Text'>" + term + "</Value></Contains>" +
                        "<Contains><FieldRef Name='NAME1' /><Value Type='Text'>" + term + "</Value></Contains></Or></Where></Query>",
                    completefunc: function (xData, Status) {
                        $(xData.responseXML).find("[nodeName='z:row']").each(function () {
                            vendors.push($(this).attr("ows_VENDOR_ID") + " - " + $(this).attr("ows_NAME1") + ", " + $(this).attr("ows_CITY") + ", " + $(this).attr("ows_STATE"));
                        });
                    }
                }); //SPServices
            }
            $(".vendor").autocomplete({
                source: vendors,
                minLength: 3
            });
        } else
            vendors = [];
    
    }
    
    function validate()
    {
            if (jQuery.inArray($(".vendor").val(), vendors) == -1) {
                myAlert("Validation Error", "Please select a valid vendor");
                return false;
            }
    }
    
    函数setVendorLookup(){
    var term=$(this.val().toLowerCase();
    如果(期限长度>2){
    if(vendors.join(“”.toLowerCase().indexOf(term)==-1){//some缓存
    供应商=[];
    $().SPServices({
    操作:“GetListItems”,
    列表名称:“黄页”,
    async:false,
    CAMLViewFields:“”,
    CAMLQuery:“+术语+”+
    “+术语+”,
    completefunc:函数(扩展数据、状态){
    $(扩展数据.responseXML).find(“[nodeName='z:row']”)。each(函数(){
    供应商.push($(this).attr(“ows_供应商ID”)+“-”+$(this).attr(“ows_名称1”)+,“+$(this.attr”(“ows_城市”)+,“+$(this.attr”(“ows_州”);
    });
    }
    });//SPServices
    }
    $(“.vendor”).autocomplete({
    资料来源:供应商,
    最小长度:3
    });
    }否则
    供应商=[];
    }
    函数验证()
    {
    if(jQuery.inArray($(“.vendor”).val(),vendors)=-1){
    myAlert(“验证错误”,“请选择有效的供应商”);
    返回false;
    }
    }
    
    您正在使用jQueryUI自动完成吗?是的,object.autocomplete