jQuery AutoComplete vs Combobox

时间:2011-11-03 20:05:43

标签: jquery jquery-autocomplete

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

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

  2. 我正在使用一个选择器列表,其中包含几千个项目(目前为几百个),从我收集的自动完成功能中,它将所有选择值加载到一个数组中然后使用从中挑选。那是对的吗?有没有更好的解决方法,所以我可以使用部分输入的单词调用Web服务,并且只对结果进行排列,而不是所有项目?这是自动完成或组合框之外的独特解决方案吗?

  3. 谢谢, 大卫

1 个答案:

答案 0 :(得分:1)

所以这就是我做的......

在按键时,使用新术语调用我的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;
        }
}
相关问题