Ho due caselle di testo (testo del tipo di input) sullo stesso codice HTML che utilizzano lo stesso completamento automatico. La prima casella di testo funziona correttamente, ma la seconda casella di testo non esegue il rendering dei risultati. Comunica con il server e ottengo i risultati, ma la funzione di rendering non viene nemmeno chiamata. L'unica differenza tra gli input è che uno è in un div che inizia nascosto e io mostro gentile come finestra Dialog impostando z-order alto e mascherando l'HTML.jQuery L'elemento di rendering incompleto non viene eseguito
Ecco il CSS per il div dove si trova la seconda casella di input.
.windowBooking {
position:absolute;
width:450px;
/* height:200px; */
display:none;
z-index:9999;
padding:20px;
}
La funzione di completamento automatico:
$(".makeClass").autocomplete({
source: function (request, response) {
$('#Code').val(); //clear code value
$.ajax({
url: "myUrl",
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'json', //What kind of Result is expected. (Ex json, xml, etc)
data: "{'searchItem':'" + request.term + "'}",
success: function (data) {
var item = [];
var len = data.d.length;
for (var i = 0; i < len; i++) {
var obj = { name: data.d[i].MakeReport, code: data.d[i].MakeCode };
item.push(obj);
}
response(item);
}
})
},
focus: function (event, ui) {
$(this).val(ui.item.name);
return false;
},
select: function (event, ui) {
$('#Code').val(ui.item.code);
$('#Name').val(ui.item.name);
$(this).val(ui.item.name);
return false;
},
open: function() {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function() {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
},
minLength: 2,
delay: 250
}).data("autocomplete")._renderItem = function (ul, item) {
var temp = item.name;
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.name + "</a>")
.appendTo(ul);
};
I campi di immissione utilizzano la stessa classe per chiamare il completamento automatico.
<input id="OtherMake" type="text" maxlength="30" size="20" class="makeClass"/> <!-- It works -->
<div id="dialogPlus" class="windowBooking">
:
<input type="text" id="MakeName" class="makeClass" /> <!-- doesn't work.-->
:
</div>
Qualche idea, perché eseguire il rendering su una casella di input e no nell'altra casella di input? Lasciatemi chiarire, sulla seconda casella di input l'unica cosa che non funziona è la funzione renderItem che per qualche motivo non viene eseguita. Sullo schermo, è possibile visualizzare un numero indefinito ma se si seleziona uno dei valori non definiti, la casella di immissione viene riempita con il valore corretto.
Aveva lo stesso problema. Spiegazione (per i curiosi): stai selezionando più elementi, e il tuo '.data (' sta impostando i dati solo sul primo. Pertanto, devi usare 'each' per iterare e impostare la funzione di rendering su ogni elemento di completamento automatico. –