我正面臨自動完成的一個奇怪問題。jQuery自動完成組件
第一個問題:
基礎上,教程中here,只有找到的項目的第一個字母顯示的自動完成的項目清單
這裏有一個例子:
我在調試時的動作
虛擬數據返回,總是th Ë一樣的,不管搜索模式只是用於測試
在渲染視圖,這是發生了什麼:
的JavaScript這種情況下的自動完成功能如下:
$("#Email").autocomplete('@Url.Action("FindEmail", "Administration")',
{
dataType: 'json',
parse: function(data) {
var rows = new Array();
for (var i = 0; i < data.length; i++) {
rows[i] = {
data: data[i].Value,
value: data[i].Value,
result: data[i].Value
};
}
return rows;
},
width: 300,
minLength: 3,
highlight: false,
multiple: false
});
第二期:
我已經改變了我的代碼以使用更舒適的Ajax調用,這取決於Model映射,而不像前面的教程中那樣發送aq和limit參數,正如我在其他許多教程中看到的,但Ajax通話不會觸發,甚至不會給我一個錯誤。
我對這種情況下的代碼是基於這個Stack Overflow Answer
這裏是我的控制器和視圖代碼相關:
//[HttpPost]
[SpecializedContextFilter]
[Authorize]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public JsonResult FindEmail(RegistrationModel model) //Notice the use of model instead of string q and string limit
{
//Just a dummy implementation
var rez = new List<ValueModel>
{
new ValueModel {Description = "[email protected]", Value = "[email protected]"},
new ValueModel {Description = "[email protected]", Value = "[email protected]"},
new ValueModel {Description = "[email protected]", Value = "[email protected]"},
new ValueModel {Description = "[email protected]", Value = "[email protected]"}
};
//var retValue = rez.Select(r => new { email = r.Value }).OrderBy(x => x).Take(10);
//return Json(retValue, JsonRequestBehavior.AllowGet);
return Json(rez, JsonRequestBehavior.AllowGet);
}
查看的JavaScript:
$("#Email").autocomplete({
source: function(request, response) {
$.ajax({
url: '@Url.Action("FindEmail", "Administration")',
type: "POST",
dataType: "json",
data: { email: $("#Email").val(), conferenceId: $("#ConferenceId").val() },
success: function(data) {
response($.map(data, function(item) {
return { label: item.Value, value: item.Value, id: item.Value };
}));
},
select: function(event, ui) {
$("input[type=hidden]").val(ui.item.id);
}
});
}
});
Firefox的控制檯視圖:
我已經嘗試了很多第二種方案的代碼,其中大部分都是Stack Overflow答案,但沒有任何事情發生!
我是我缺少的東西?
注:jQuery插件都包括在內,阿賈克斯已經在同一個頁面上工作,所以我不知道什麼問題
感謝您的幫助。
在第一個例子中,在下拉列表顯示每個電子郵件地址的第一個字母? – markpsmith
是的,每個irem的第一個字母 – simsim
所以在javascript for()循環中必須存在一個錯誤。你可以在Firebug中調試它,看看發生了什麼? – markpsmith