javascript - utilizando - jQuery UI Autocompletar: borrar el término de búsqueda anterior
busqueda instantanea jquery (8)
Al hacer lo siguiente, se restablece el término de búsqueda anterior:
$(''#AutocompleteElementID'').data().autocomplete.term = null;
Si hace lo siguiente cuando se selecciona un elemento, borrará el término de búsqueda anterior y hará que el widget realice una búsqueda si vuelven a escribir el mismo valor.
En el evento de selección del widget Autocompletar de jQuery UI, la declaración de caso predeterminada tiene el siguiente código:
default:
// keypress is triggered before the input value is changed
clearTimeout( self.searching );
self.searching = setTimeout(function() {
// only search if the value has changed
if ( self.term != self.element.val() ) {
self.selectedItem = null;
self.search( null, event );
}
}, self.options.delay );
break;
De lo que puedo ver, la sexta línea del código anterior impide la ejecución si el usuario escribe el mismo valor dos veces. Esto tiene sentido la mayor parte del tiempo, pero en mi caso, está causando un problema.
Estoy construyendo una aplicación ajax que tiene un encabezado fijo con una entrada de búsqueda en la parte superior. El usuario puede escribir todo lo que quiera en el cuadro de búsqueda y aparecerá un div con los resultados de búsqueda que coincidan con su consulta. Si el usuario escribe ''abc'' y hace clic en un resultado, carga la página correspondiente a través de ajax y borra el cuadro de búsqueda. El problema es que si los usuarios vuelven a escribir ''abc'', el método de búsqueda no se activa, ya que lo que escribieron coincide con lo que buscaron por última vez.
¿Hay alguna manera de borrar el valor de autoterritorial almacenado dentro del widget cuando el usuario hace clic en un resultado de búsqueda? ¿O hay otra forma de resolver mi problema sin tener que preparar mi propia versión del widget Autocompletar?
Gracias
si la función de autocompletar regresa a sí misma, para su elemento de autocompletar solo debe poder llamar
$yourAutoCompleteElement.term = null;
cuando quieras limpiarlo
close: function(event, ui)
{
// Close event fires when selection options closes
$(this).data().autocomplete.term = null; // Clear the cached search term, make every search new
},
Desafortunadamente,
$(this).data().autocomplete.term = null;
no borra el campo de entrada. Para hacerlo, lo siguiente funciona:
close: function(event, ui) {
// Close event fires when selection options closes
$(''input'')[0].value = ""; // Clear the input field
}
Esto no funcionó para mí:
$(this).data().autocomplete.term = null;
Sin embargo, este DID me funciona en jQuery UI - v1.10.2:
$(this).data().term = null;
Deberías intentarlo :
$("#AutocompleteElementID").autocomplete("instance").term = null;
Avísame si te funciona
Después de borrar el campo de texto puede restablecer la búsqueda anterior invocando el método de "búsqueda" de autocompletar de jquery ui con una cadena vacía.
$(''#AutocompleteElementID'').autocomplete( "search", "" );
De forma predeterminada, debe alcanzarse una longitud de búsqueda mínima antes de que se muestren los elementos, por lo que borra de forma efectiva la búsqueda sin mostrar todos los resultados.
http://api.jqueryui.com/autocomplete/#method-search
Esta debería ser una forma estable de manejar esta situación ya que el método de búsqueda no ha cambiado con el tiempo.
Las API han cambiado en las últimas versiones de jQuery / jQuery UI.
La forma correcta de acceder a la propiedad en la instancia del widget ahora es:
$("#AutocompleteElementID").autocomplete("instance").term = null;
Ejemplo de código: http://jsfiddle.net/altano/sdpL17z5/
Trabajo verificado con jQuery UI 1.11.4 y jQuery 2.2.3