代码之家  ›  专栏  ›  技术社区  ›  mare

jquery自动完成其他领域的“附带损害”

  •  1
  • mare  · 技术社区  · 15 年前

    我有一个jquery autocomplete字段工作正常,后面是一个日期输入字段。每当用户从自动完成列表中选择一个项目时,它会正确地选择该项目并激发result(),但它还会在“我的日期”字段中创建“附带损坏”,并将所选自动完成项目的ID插入其中。这是一个例子,但我在其他场合也注意到了,有时如果其他输入字段在自动完成字段之前或之后,并不重要。另外,如果有3个(任何数字)其他字段,所有三个字段都将插入自动完成项ID。

    这是不受欢迎的行为,我需要摆脱它。 有人吗?

    代码如下:

            $("#Clients").focus().autocomplete('<%=Url.Action("GetClients", "Client") %>', {
                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].ClientName, result: data[i].ClientName };
                    }
                    return rows;
                },
                formatItem: function(row, i, n) {
                    return row.ClientName;
                },
                width: 300,
                minChars: 0,
                max: 0,
                delay: 50,
                cacheLength: 10,
                selectFirst: true,
                selectOnly: true,
                mustMatch: true
            });
    
            $("#Clients").result(function(event, data, formatted) {
                if (data) {
                    $(this).parent().next().find("input").val(data["client_id"]);
                    if (data["ClientName"] && data["client_address1"] && data["client_postcode"] && data["client_postname"]) {
                        $("#ClientDetails").html(
                        "<li class=\"clientNumber\">Client Id: " + data["client_ClientNumber"] + "</li>" +
                        "<li>" + data["ClientName"] + "</li>" +
                        "<li>" + data["client_address1"] + "</li>" +
                        "<li>" + data["client_postcode"] + data["client_postname"] + "</li>"
                        );
                    }
                    else {
                        $("#ClientDetails").html(
                        "<li class=\"clientNumber\">Client Id: " + data["client_ClientNumber"] + "</li>" +
                        "<li>" + data["ClientName"] + "</li>");
                    }
                }
            });
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   AxelEckenberger    15 年前

    给我这条线

    $(this).parent().next().find("input").val(data["client_id"]);
    

    看起来有点可疑。

    • 你得到的是 ID为“clients”的输入控件
    • 然后移到下一项
    • 发现 全部的 此项中的输入控件
    • 设置的值 全部的 找到客户端的输入控件