我有一个带有文本字段的web应用程序,可以在下拉列表中进行搜索。 我使用此文本框进行搜索
@Html.TextBox("Search",
"",
new { id = "Search" + @Model.ID + "",
@class = "Search" })
在此下拉列表中
@Html.DropDownListFor(
m => m.MainSynonymId,
new SelectList(ViewBag.SynonymList,
"ID",
"Name",
Model.MainSynonymId),
new { id = "MainSynonymList" + @Model.ID + "",
@class = "SynonymList TableClass" })
如果我在搜索输入中填写了某些内容,则下拉列表应自动仅包含内容元素,其中包含搜索到的字母。所以我在keydown上实现了一个jquery方法来触发所有输入,将它们发送到服务器并用json发送回客户端。 这是jQuery:
$('.Search').bind("keydown", function (event) {
var fieldId = $(this).attr('id');
var field = "Search";
var id = fieldId.replace(field, '');
$.getJSON('@Url.Action("GetSpecific", "Models")', { Name: $('#' + fieldId + '').val() }, function (data) {
var items;
$.each(data, function (i, g) {
items += "<option value='" + g.Value + "'>" + g.Text + "</option>";
$.ajaxSetup({ cache: false });
});
$('#MainSynonymList' + id + '').html(items);
});
});
沟通工作差不多好。唯一的问题是,keydown上的方法不会使用已使用的键,而是输入字段中的所有其他键。
例如:我在输入字段“example”中写道,在按下最后一个“e”触发事件后,将“exampl”一词发送到服务器。 我做错了什么?
答案 0 :(得分:4)
这是因为keydown
事件在将值添加到字段之前触发。请改用keyup
或keypress
。
答案 1 :(得分:1)
只需将keydown替换为代码中的keyup。
这应该成为
$('.Search').bind("keydown", function (event) {}
此
$('.Search').bind("keyup", function (event) {}
这是一个example