2010-05-03 8 views
1

Je souhaite filtrer les résultats de saisie semi-automatique en fonction de l'option sélectionnée dans une entrée de sélection.Filtrage automatique de jquery?

échantillon de données JSON:

[{ "contactID": "8590051631", "ContactType": société, "Nom": "Test}, {" "contactID": "8590049225", "ContactType": personne, « Nom »:. "TestName}]

voici mon code

<div> 

<select class="type"> 
<option>Person</option> 
<option>Company</option> 
</select> 

<input type="text" class="name" /> 

</div> 


$('.name').autocomplete("http://services.mydomain.com/rest/ia/findcontact", { 
      dataType: 'jsonp', 
      extraParams: { 
       limit: '', 
       timestamp: '' } 
      }, 
      parse: function(data) { 
       var items = data; 
       var parsed = []; 
       if (items != null || items != undefined) { 
        for (var i = 0; i < items.length; i++) 
         parsed[i] = { data: [items[i]], value: items[i].ContactId, result: [items[i].Name] }; 
       } 
       return parsed; 
      }, 
      formatMatch: function(d,i,t) { 
      alert($(this).parent().find(".type").val()); 
       // do some filtering here? 
      } 

     });  

Il semble que je devrais utiliser l'option formatMatch pour filtrer les résultats mais je ne peux pas obtenir ce travail Comment filtrer les résultats sont basés sur la valeur d'option sélectionnée?

+0

Essayez d'utiliser Jqeury.grep, reportez-vous [lien] [1] [1]: http://stackoverflow.com/questions/12753082/remove-selected-item-from-array -in-jquery-autocomplete – vaibhav

Répondre

0

Je devine dans la fonction d'analyse, vous pouvez obtenir le type sélectionné actuel, et ignorer l'élément si ce n'est pas le type sélectionné?

parse: function(data) { 
    var items = data; 
    var parsed = []; 
    if (items != null || items != undefined) { 
     //get current type 
     var selectedType = $(this).parent().find(".type").val(); 
     for (var i = 0; i < items.length; i++) { 
      if (selectedType == items[i].ContactType){ 
       //just append to the array so you don't need to worry about missing indices. 
       parsed.push({ data: [items[i]], value: items[i].ContactId, result: [items[i].Name] }); 
      } 
     } 
    } 
    return parsed; 
} 
+0

Merci pour la réponse et la suggestion. J'y pensais aussi et j'ai essayé, mais j'ai obtenu 'indéfini' pour var selectedType = $ (this) .parent(). Find (". Type"). Val(); On dirait qu'il ne peut pas trouver l'entrée de sélection. Comment puis-je trouver d'autres entrées dans le même div que l'entrée de saisie semi-automatique? – dm80

+0

Je ne suis pas sûr à 100% de ce que $ (this) indique dans la fonction d'analyse. Peut-être essayer d'alerte ($ (this)) pour s'assurer qu'il pointe vers l'élément de la zone de texte? Si cela fonctionne, trouver la boîte de sélection est trivial. $ (this) .prevAll ("select.type"). val(); – coolnalu

+0

Looking in Firebug $ (this) est le plugin de saisie semi-automatique. J'ai essayé $ (this) .parent(). Find (". Type"). Val(); et $ (this) .prevAll ("select.type"). val(); mais aucun travail. – dm80