如何让 Jquery 自动完成结果事件处理程序正常工作?

发布于 2024-08-05 11:24:33 字数 1525 浏览 5 评论 0原文

我编写的代码无法使用 JQuery 自动完成 在用户选择某些内容后触发结果函数有效(如下)。

我所说的结果是指结果处理程序,它是在自动完成插件中进行良好选择后触发的函数。记录于此处

就我而言,我有一个表单,它实际上是一个表,其中每一行都相同,减去字段上的唯一 id:Item1、Qty1、Desc1,然后是 Item2、Qty2、Desc2,依此类推。当用户输入项目1代码时,描述1文本应当显示所选项目代码的英文(项目2→描述2,等等)。

我使用此代码查找所有项目输入并对其进行自动完成。由于某种原因,结果事件处理程序不会触发。如果您注意到的话,我对“Item1”选择进行了硬编码,因为我还没有弄清楚如何选择 Item1 -> 的 Item 的相应描述。描述 1,项目 2 ->描述2,等等。

我使用 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);
  });
});

I wrote code that fails to use the JQuery autocomplete to fire a result function after the user selects something valid (below).

By result, I mean result handler, a function that fires after a good selection happens in the autocomplete plugin. Documented here.

In my case, I have a form that is really a table where each row is the same, minus the unique ids on the fields: Item1, Qty1, Desc1, then Item2, Qty2, Desc2, and so on. When the user types in an Item1 code, the Desc1 text should display the English of the item code selected (Item2 -> Desc2, and so on).

I used this code to find all the Item inputs and slap the autocomplete on it. The result event handler doesn't fire for some reason. If you notice, I hard coded the "Item1" selection because I haven't figured out how to select the corresponding Desc to the Item where Item1 -> Desc1, Item2 -> Desc2, and so on.

I used the MVC Url.Content only because I happen to get it working. Someone used Url.Action, which I think is better, just have to figure it out.

Feel free to correct my use as necessary, this is my first time with ASP.NET MVC / JQuery.

Thank you :)

The code:

$(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);
  });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╰つ倒转 2024-08-12 11:24:33
$(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);
    });
});
$(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);
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文