J'utilise jQuery autocomplete avec une zone de texte sous asp.net mvc 2, et tout fonctionne bien. Je tape une recherche et renvoie une liste de résultats. Mais si je tape quelques caractères puis recule et efface tout le texte de la boîte de texte, je veux qu'une liste d'éléments par défaut apparaisse. Malheureusement, l'appel ajax à mon contrôleur ne se déclenche pas après retour arrière et suppression de tout le texte. Une chose dont j'ai besoin de mentionner que j'utilise la saisie semi-automatique d'une manière légèrement différente. J'utilise la fonctionnalité de saisie semi-automatique pour agir comme un mécanisme de filtrage. Lorsque l'utilisateur tape dans la zone de texte, un appel ajax est effectué et les résultats sont injectés dans une balise div. Je ne veux pas que la liste déroulante standard apparaisse sous la zone de texte, je veux juste utiliser la fonctionnalité que la saisie semi-automatique fournit pour afficher dynamiquement une liste d'éléments dans une page pendant que je tape une chaîne de filtre. Je le fais parce que la liste des résultats est dans les centaines et ayant la capacité de taper quelques caractères et de retourner un résultat filtré, il est beaucoup plus rapide de trouver un élément dans la liste. Pour contourner ce problème, j'ai essayé de m'intégrer dans les événements onchange/onkeypress/onkeyup de textbox et de vérifier s'il y a du texte dans la zone de texte et s'il n'y en a aucun n'affiche la liste par défaut. Mais encore une fois, il ne veut pas travailler pour moi. C'est comme si les événements de la zone de texte ne se déclenchent pas lorsque le texte est supprimé de la zone de texte.jQuery autocomplete renvoie la liste vide si aucun texte dans la zone de texte
Je voudrais trouver un moyen pour que lorsque le texte dans la zone de texte est supprimé une recherche par défaut est effectuée automatiquement.
Voici mon html ...
<% using (this.Html.BeginForm("Filter", "Guilds"))
{%>
Filter:
<input type="text" name="SearchFilterText" value="" id="filterTextBox" onkeyup="onfilterchange();" />
<%
}%>
<script type="text/javascript">
$(function() {
$("#filterTextBox").autocomplete({
source: [""],
search: function (event, ui) {
populatelist();
return true;
},
minLength: 1,
delay: 300
});
});
</script>
<div id="success">
<% Html.RenderPartial("GuildList", this.Model); %>
</div>
<div id="error">
</div>
ici est mon script dans la section de la tête ....
function populatelist() { var url = "/FilteredGuilds///"; $.ajax({ url: url + $("#filterTextBox").val(), dataType: "html", success: function(response, status, xhr) { $('#success').html(response); $("#error").html(""); }, error: function(response, status, xhr) { if (status == "error") { $("#success").html(""); var msg = "Sorry but there was an error: "; $("#error").html(msg + xhr.status + " " + xhr.statusText); } } }); } function onfilterchange(){ if($("#filterTextBox").val() == null | $("#filterTextBox").val() ==""){ populatelist(); } }
Et voici mon action du contrôleur ....
[HttpGet] public PartialViewResult Filter(string realm, DateTime date, string filter) { var guildNames = this._repository.GetGuildNames(date, realm); if (string.IsNullOrEmpty(filter)) return PartialView("GuildList", guildNames); return PartialView("GuildList", guildNames.Where(x => x.Name.ToLower().Trim().Contains(filter.ToLower().Trim())).ToList()); }
voir ma réponse ci-dessous pour plus de détails. mon intuition est que votre filtre de chaîne étant nul va provoquer l'action du contrôleur à l'erreur. avez-vous mis un arrêt de débogage sur la section de retour de cela ?? aussi, je remarque que votre section url dans le code de jquery est var url = "/ FilteredGuilds ///" ;. Je ne suis pas sûr de la façon dont vous arrivez à «filtrer» à partir de là? (aussi, pourquoi les caractères supplémentaires ///? –