2011-11-03 77 views
0

我打電話給一個Web服務(使用SPServices)將所有的項目都放到一個數組中,然後在我的自動完成調用中使用該數組。它的偉大工程,但我有幾個問題/問題jQuery AutoComplete vs Combobox

  1. 我怎麼能拒絕來自選擇那些不是在選擇列表值的用戶?我認爲一個組合框這樣做,但我不想將整個列表加載到頁面上......這導致#2

  2. 我正在使用一個選擇器列表,其中將有幾千項它(目前只有幾百個),從我收集的自動完成數據中將所有選擇值加載到一個數組中,然後使用它從中選擇。那是對的嗎?有沒有更好的解決方法,這樣我就可以用部分輸入的單詞調用一個Web服務,只排列結果,而不是所有的項目?這是否會成爲自動完成或組合框之外的獨特解決方案?

謝謝, 大衛

+0

您是否使用jQueryUI自動完成? –

+0

是的,object.autocomplete –

回答

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; 
     } 
}