Keydown事件不使用最新的输入值

时间:2013-11-26 07:45:30

标签: jquery ajax json

我有一个带有文本字段的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”一词发送到服务器。 我做错了什么?

2 个答案:

答案 0 :(得分:4)

这是因为keydown事件在将值添加到字段之前触发。请改用keyupkeypress

答案 1 :(得分:1)

只需将keydown替换为代码中的keyup。

这应该成为

$('.Search').bind("keydown", function (event) {}

$('.Search').bind("keyup", function (event) {}

这是一个example