Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Keydown事件未使用最新输入值_Jquery_Ajax_Json - Fatal编程技术网

Jquery Keydown事件未使用最新输入值

Jquery Keydown事件未使用最新输入值,jquery,ajax,json,Jquery,Ajax,Json,我有一个带有文本字段的Web应用程序,可以在dropdownlist中搜索。 我使用此文本框进行搜索 @Html.TextBox("Search", "", new { id = "Search" + @Model.ID + "", @class = "Search" }) 在这个下拉列表中 @Html.DropDownListFor( m => m.MainSynonym

我有一个带有文本字段的Web应用程序,可以在dropdownlist中搜索。 我使用此文本框进行搜索

@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之后,触发的事件oly将exampl这个词发送到服务器。
我做错了什么?

这是因为keydown事件在值添加到字段之前触发。改用keyup或keypress。

这是因为keydown事件在将值添加到字段之前触发。使用keypup或keypress代替。

只需将代码中的keypdown替换为keypup即可

这应该成为

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


这是一个

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

这应该成为

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


下面是一个

为什么不使用$this.val而不是使用这样一个复杂的代码?好主意,但它只替换代码中的一个点。我仍然需要从textfield中获取id,因为它位于一个表中,每一行都有这样的方法,每个方法都应该只触发它所在行的下拉列表。只有触发此事件的textbox才会被$this引用。是的,我用$this.val替换了$+fieldId+.val,但我仍然需要var fieldId=$this.attr'id';var字段=搜索;var id=fieldId.replacefield;要选择正确的下拉列表$'MainSynonymList'+id+.htmlitems;。为什么不使用$this.val而不是使用这样一个复杂的代码呢?好主意,但它只替换代码中的一个点。我仍然需要从textfield中获取id,因为它位于一个表中,每一行都有这样的方法,每个方法都应该只触发它所在行的下拉列表。只有触发此事件的textbox才会被$this引用。是的,我用$this.val替换了$+fieldId+.val,但我仍然需要var fieldId=$this.attr'id';var字段=搜索;var id=fieldId.replacefield;要选择正确的下拉列表$'MainSynonymList'+id+.htmlitems;。谢谢你这就是我错过的:没问题,很高兴能帮忙。谢谢你这就是我错过的:没问题,很高兴能帮忙。