我使用jQuery自動完成與asp.net mvc 2下的文本框,並且一切正常。我鍵入搜索並返回結果列表。但是,如果我鍵入一些字符,然後退格並刪除文本框中的所有文本,我想要默認的項目列表出現。 Unfortunatley調用我的控制器的ajax不會在退格和刪除所有文本後觸發。如果文本框中沒有文本,jQuery自動完成返回空列表
我需要提到的一件事我以稍微不同的方式使用自動完成功能。我正在使用自動完成功能來充當過濾機制。當用戶輸入到文本框中時,會發出ajax調用,並將結果注入到div標籤中。我不希望在文本框下面顯示標準下拉菜單,我只是想使用自動完成功能提供的功能,以便在輸入過濾器字符串時動態顯示頁面中的項目列表。
我這樣做是因爲結果列表的數量是幾百個,並且能夠輸入幾個字符,返回一個過濾結果使其在列表中找到一個項目的速度更快。
爲了解決這個問題,我嘗試在文本框onchange/onkeypress/onkeyup事件中掛鉤,並檢查文本框中是否有任何文本,以及是否顯示默認列表。但它又不想爲我工作。就好像當文本從文本框中刪除時文本框事件不會觸發。
我想找到一種方法,以便當文本框中的文本被刪除時,會自動執行默認搜索。
這裏是我的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>
,這裏是我的頭節腳本....
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(); } }
這裏是我的控制器行動....
[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()); }
有關更多詳細信息,請參閱下面的答案。我的直覺是,你的字符串過濾器爲空會導致控制器動作出錯。你有沒有把調試停止在那個返回部分?另外,我注意到你的url部分在jquery代碼中是var url =「/ FilteredGuilds ///」;.我不確定你如何從那裏'過濾'? (另外,爲什麼額外的///字符? – 2010-07-26 10:38:38