2009-05-12 7 views
6

J'ai une page avec deux champs de saisie Ville et Lieu. J'ai le plugin autocomplete de Devbridge qui fonctionne très bien pour le champ de la ville. Je veux maintenant que cela fonctionne sur le terrain. Le javascript que j'ai à ce jour est:Jquery Saisie semi-automatique des demandes chaînées

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#Event_City').autocomplete({ 
      serviceUrl: '<%=Url.Action("GetCities", "Search") %>', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { country: 'Yes' }, 
     }); 
     $('#Event_Venue').autocomplete({ 
      serviceUrl: '<%=Url.Action("GetVenues", "Search") %>', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { city: $("#Event_City").val() }, 
     }); 
    });  
</script> 

La deuxième saisie semi-automatique passe un paramter supplémentaire (ville) à l'action sur mon contrôleur. J'utiliserai alors ceci pour limiter mes réponses aux endroits dans cette ville. Ce paramètre est reçu mais ne contient pas la valeur courante entrée dans #Event_City. Au lieu de cela, il contient la valeur par défaut.

Est-ce que quelqu'un sait comment évaluer la valeur lorsque la saisie semi-automatique est appelée?

Je commence juste avec Javascript alors s'il vous plaît soyez gentil.

Merci,

+0

J'étais sur le point de demander la même chose. J'essayais de passer le paramètre 'normalement', mais je suppose que le champ n'est pas mis à jour sans utiliser l'événement onchange. –

Répondre

7

@Ian Mckay - Afin d'obtenir la saisie semi-automatique pour le Lieu pour filtrer en fonction de la ville, vous avez besoin de se lier en cas de la Ville comme « changement » suit:

$(document).ready(function() { 
    $('#Event_City').autocomplete({ 
     serviceUrl: '', 
     minChars:2, 
     width: 300, 
     delimiter: /(,|;)\s*/, 
     deferRequestBy: 150, //miliseconds 
     params: { country: 'Yes' }, 
    }).change(function(){ 
     $('#Event_Venue').autocomplete({ 
      serviceUrl: '', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { city: $("#Event_City").val() } 
     }); 
    }); 
}); 
+0

Etes-vous sûr que cela ne va pas lier plus d'une fois le plug-in de saisie semi-automatique à la zone de texte? Cela pourrait être mauvais. Par exemple, si vous modifiez la valeur de la première zone de texte, disons 20 fois, la deuxième zone de texte sera-t-elle 20 fois autosuggée (et donc 20 appels ajax asynchrones au backend à la fois)? o_0 – KyleFarris

+0

@Kyle - Je crois, vous avez raison. Cela arriverait si l'utilisateur décide de revenir en arrière et de changer la ville. Le plugin jQuery d'auto-complétion standard a une option "destroy" qui pourrait être transmise, mais pas celle-ci. –

3

La raison pour laquelle il contient la valeur par défaut est parce que la saisie semi-automatique est attaché à la zone de texte lorsque la page est chargée. Pour qu'il soit mis à jour avec la nouvelle valeur, le plugin doit vous fournir un moyen de mettre à jour les propriétés de son objet paramètre ou vous permettre de le détruire sur le second élément et de le reconstruire chaque fois que l'utilisateur change le premier sa valeur. La bibliothèque de saisie semi-automatique que vous avez choisie semble assez légère (pas toujours une mauvaise chose ... juste dans votre cas c'est ...) et ne semble pas supporter cette fonctionnalité.

Ma meilleure suggestion pour vous serait d'essayer une autre bibliothèque. J'ai tendance à aimer ce très bien comme il est assez polyvalent (demo page):

http://view.jquery.com/trunk/plugins/autocomplete/demo/

+0

Vous obtenez un très bon point +1 – ichiban

Questions connexes