我有一個帶文本框的web應用程序在下拉列表中進行搜索。 我使用這個文本框的搜索未使用最新輸入值的Keydown事件
@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」發送到服務器。 我做錯了什麼?
爲什麼不使用'$(本).VAL()',而不是使用這種費解的代碼? – Achrome
好主意,但它只代替代碼中的一個點。我仍然需要從文本字段獲取id,因爲它在每行中都有這樣一個方法的表中,並且每個方法只應觸發行中的下拉列表。 –
只有觸發此事件的文本框纔會被'$(this)'引用。 – Achrome