Domanda

Ho un campo jQuery completamento automatico lavorando bene seguito da un campo data di input. Ogni volta che un utente seleziona un elemento dalla lista di completamento automatico seleziona correttamente l'oggetto e gli incendi risultato (), ma crea anche "danni collaterali" nel mio campo per la data, l'inserimento di ID della voce di completamento automatico selezionato in esso. Questo è un caso di esso, ma ho anche notato che in altre occasioni, a volte se altri campi di input sono prima di completamento automatico campo o dietro, non ha molta importanza. Anche se ci sono 3 (qualsiasi numero) altri campi tutti e tre sarebbe stato inserito l'ID voce di completamento automatico.

Si tratta di un comportamento indesiderato e ho bisogno di sbarazzarsi di esso. Chiunque?

Ecco il codice:

        $("#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>");
                }
            }
        });
È stato utile?

Soluzione

Per quanto mi riguarda questa riga

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

sembra un po 'dubbioso.

  • Hai trovato il genitore del controllo di input con l'ID "Clienti"
  • Poi si passa alla voce successiva
  • Trova tutti controlli di input all'interno di questa voce
  • Imposta il valore di tutti trovato controlli di input al client_id
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top