Tengo dos cuadros de texto (tipo de entrada de texto) en el mismo HTML que usan la misma función de autocompletar. El primer cuadro de texto funciona bien, pero el segundo cuadro de texto no representa los resultados. Se comunica con el servidor y obtengo los resultados, pero la función de renderizado ni siquiera se llama. La única diferencia entre las entradas es que uno está en un div que comienza oculto y se muestra amable como la ventana de Diálogo al establecer z-order high y enmascarar el HTML.jQuery El elemento de autocompletar no se ejecuta
Aquí está el CSS para el div donde se encuentra el segundo cuadro de entrada.
.windowBooking {
position:absolute;
width:450px;
/* height:200px; */
display:none;
z-index:9999;
padding:20px;
}
La función de autocompletar:
$(".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);
};
Las cajas de entrada usan la misma clase para llamar a la función de autocompletar.
<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>
Alguna idea, por qué renderizar en un cuadro de entrada y no en el otro cuadro de entrada? Permítanme dejar en claro, en el segundo cuadro de entrada lo único que no funciona es la función renderItem que por alguna razón no se ejecuta. En la pantalla, puede ver una gran cantidad de indefinidos, pero si selecciona alguno de los valores indefinidos, el cuadro de entrada se llena con el valor correcto.
Tenía el mismo problema. Explicación (para curiosos): está seleccionando múltiples elementos, y su '.data (' está configurando datos solo en el primero. Por lo tanto, necesita usar 'each' para iterar y establecer la función de renderizado en cada elemento de autocompletar. –