我编写的代码在用户选择有效内容后(以下)未能使用JQuery autocomplete触发结果函数。

结果,我的意思是结果处理程序,该函数会在自动完成插件中进行良好选择后触发。记录的here

就我而言,我的表单实际上是一个表,其中每一行都是相同的,减去以下字段上的唯一ID:Item1,Qty1,Desc1,然后是Item2,Qty2,Desc2,依此类推。当用户键入Item1代码时,Desc1文本应显示所选项目代码的英文(Item2-> Desc2,依此类推)。

我使用此代码查找所有Item输入并对其进行自动完成。由于某种原因,结果事件处理程序不会触发。如果您注意到了,我就对“Item1”选择进行了硬编码,因为我还没有弄清楚如何选择相应的Desc到Item,其中Item1-> Desc1,Item2-> Desc2,依此类推。

我之所以使用MVC Url.Content,仅仅是因为我碰巧使它起作用。有人使用了Url.Action(我认为更好),只需要弄清楚就可以了。

随时根据需要更正我的用法,这是我第一次使用ASP.NET MVC / JQuery。

谢谢 :)

代码:

$(document).ready(function(){

  $("input[id^='Item']").autocomplete( "<%= Url.Content("~/products/autocomplete")%>", {
  dataType: 'json',
  parse: function(data) {
      var rows = new Array();
      for( var i = 0; i<data.length; i++)
      {   rows[i] = {data:data[i], value:data[i].name, result:data[i].id }; }
      return rows;
  },
  formatItem: function(row, i, n) {
            return row.id + ' - ' + row.name;
        },
  selectFirst: true,
  //autoFill: true,
  minChars: 2,
  max: 30,
  autoFill: true,
  mustMatch: true,
  matchContains: false,
  scrollHeight: 100,
  width: 300,
  cacheLength: 1,
  scroll: true
  });

  $("Item1").result(function(event, data, formatted) {
      $("Desc1").html( !data ? "No match!" : "Selected: " + formatted);
  });
});

最佳答案

$(document).ready(function(){

    $("input[id^='Item']").autocomplete( "<%= Url.Content("~/products/autocomplete")%>", {
            dataType: 'json',
            parse: function(data) {
                var rows = new Array();
                for( var i = 0; i<data.length; i++)
                {   rows[i] = {data:data[i], value:data[i].name, result:data[i].id }; }
                return rows;
            },
            formatItem: function(row, i, n) {
                return row.id + ' - ' + row.name;
            },
            selectFirst: true,
            //autoFill: true,
            minChars: 2,
            max: 30,
            autoFill: true,
            mustMatch: true,
            matchContains: false,
            scrollHeight: 100,
            width: 300,
            cacheLength: 1,
            scroll: true
    }).result(function(event, data, formatted) {
        var n = $(this).attr("id").match(/\d+/);
        var b = $("span[id='Desc"+n+"']")
        b.html( !data ? "No match!" : "Selected: " + formatted);
    });
});

10-04 22:33
查看更多