2011-11-03 7 views
0

J'appelle un service Web (en utilisant SPServices) pour placer tous mes éléments dans un tableau, puis j'utilise ce tableau dans mon appel de saisie semi-automatique. Il fonctionne très bien, mais j'ai quelques questions/problèmesjQuery AutoComplete vs Combobox

  1. Comment puis-je refuser à l'utilisateur de sélectionner des valeurs qui ne sont pas dans la liste de sélection? Je pense qu'une zone de liste déroulante le fait, mais je ne veux pas charger toute la liste sur la page ... ce qui conduit à # 2

  2. J'utilise une liste de sélection qui aura quelques milliers d'éléments dans il (actuellement quelques centaines), à partir de ce que je rassemble avec auto-complétion, il charge toutes les valeurs de choix dans un tableau, puis utilise ce choix. Est-ce exact? Existe-t-il un meilleur moyen de contourner ce problème afin que je puisse appeler un service Web avec mes mots partiellement saisis, et que je ne regroupe que les résultats, pas tous les éléments? Sera-ce une solution unique en dehors de la saisie semi-automatique ou combobox?

Merci, David

+0

Utilisez-vous la saisie semi-automatique jQueryUI? –

+0

Oui, object.autocomplete –

Répondre

1

Alors, voici ce que je faisais ...

sur clé, appelez mon service web avec le nouveau terme, puis mettre les résultats retournés dans la saisie semi-automatique. De plus, les résultats sont ensuite mis en cache.

Je vérifie également, lorsque l'utilisateur continue, que la valeur spécifiée est contenue dans le tableau, en s'assurant qu'il n'a pas modifié la valeur.

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