1

jquery オートコンプリート フィールドが正常に機能し、その後に日付入力フィールドが続きます。ユーザーがオートコンプリート リストからアイテムを選択するたびに、アイテムが正しく選択され、result() が起動されますが、選択したオートコンプリート アイテムの ID が挿入されて、日付フィールドに「巻き添え被害」が発生します。これはその 1 つのケースですが、他の入力フィールドがオートコンプリート フィールドの前または後ろにある場合は、実際には問題にならない場合もあります。また、他のフィールドが 3 つ (任意の数) ある場合、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>");
                }
            }
        });
4

1 に答える 1

0

私にとってこのライン

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

少し疑わしく見えます。

  • ID「クライアント」を持つ入力コントロールの親を取得しています
  • その後、次の項目に移動します
  • このアイテム内のすべての入力コントロールを検索
  • 見つかったすべての入力コントロールの値をclient_id に設定します
于 2010-02-28T14:06:59.810 に答える