binding - body - live is not a function jquery 3
Vincular jQuery UI autocompletar con.live() (12)
.live () no funciona con el foco. también keyup.autocmplete no tiene ningún sentido. En cambio, lo que he intentado y trabajado es esto
$(document).ready(function(){
$(''.search'').live(''keyup'' , function()
{
$(this).autocomplete({ source : ''url.php'' });
});
})
Esto funciona perfectamente bien.
He buscado en todas partes, pero parece que no puedo encontrar ninguna ayuda ...
Tengo algunos cuadros de texto que se crean dinámicamente a través de JS, por lo que debo vincular todas sus clases a un autocompletar. Como resultado, necesito usar la nueva opción .live ().
Como ejemplo, para unir todos los elementos con una clase de .foo ahora y en el futuro creado:
$(''.foo'').live(''click'', function(){
alert(''clicked'');
});
Toma (y se comporta) lo mismo que .bind (). Sin embargo, quiero vincular un autocompletar ...
Esto no funciona:
$(''.foo'').live(''autocomplete'', function(event, ui){
source: ''url.php'' // (surpressed other arguments)
});
¿Cómo puedo usar .live () para enlazar autocompletar?
ACTUALIZAR
Lo descubrí con el Framer:
$(function(){
$(''.search'').live(''keyup.autocomplete'', function(){
$(this).autocomplete({
source : ''url.php''
});
});
});
Después de leer y probar las respuestas de todos los demás, lo actualicé para la versión actual de JQuery e hice algunos ajustes.
El problema con el uso de la tecla de acceso como el evento que llama a .autocomplete()
es que no se autocompleta para esa primera letra escrita. Usar el foco es la mejor opción.
Otra cosa que he notado es que todas las soluciones dadas dan como resultado que se llame varias veces a .autocomplete()
. Si está agregando un elemento dinámicamente a la página que no se eliminará nuevamente, el evento solo se activará una vez. Incluso si el elemento debe eliminarse y agregarse nuevamente, el evento debe eliminarse y luego volver a agregarse cada vez que se elimine o agregue el elemento para que al enfocar nuevamente en el campo no se .autocomplete()
innecesariamente .autocomplete()
cada vez.
Mi código final es el siguiente:
$(document).on(''focus.autocomplete'', ''#myAutocomplete'', function(e){
$(this).autocomplete(autocompleteOptions);
$(document).off(''focus.autocomplete'', ''#myAutocomplete'');
});
Esto funciona para mí:
$(function()
{
$(''.item_product'').live(''focus.autocomplete'', function()
{
$(this).autocomplete("/source.php/", {
width: 550,
matchContains: true,
mustMatch: false,
selectFirst: false,
});
});
});
La función de autocompletado de jQuery UI agrega automáticamente la clase "ui-autocomplete-input" al elemento. Recomendaría vincular en vivo el elemento en el foco sin la clase "ui-autocompletar-input" para evitar volver a vincular en cada evento keydown dentro de ese elemento.
$(".foo:not(.ui-autocomplete-input)").live("focus", function (event) {
$(this).autocomplete(options);
});
Editar
Mi respuesta ahora está desactualizada desde jQuery 1.7, vea el comentario de Nathan Strutz para usar con la nueva sintaxis .on()
.
Me acabo de dar cuenta de que editaste tu publicación con esta respuesta. Era obvio para mí, así que lo publicaré a continuación para otros. Gracias.
$(function()
{
$(''.search'').live(''keyup.autocomplete'', function()
{
$(this).autocomplete({ source : ''url.php'' });
});
});
No puedes. .live () solo admite eventos de JavaScript reales, no cualquier evento personalizado. Esta es una limitación fundamental de cómo funciona .live ().
Para obtener el trabajo de autocompletar cuando se carga dinámicamente para el evento on()
utilizado en jQuery> 1.7, usando la sintaxis que Nathan Strutz proporciona en su comentario:
$(document).on(''focus'', ''.my-field:not(.ui-autocomplete-input)'', function (e) {
$(this).autocomplete(options)
});
donde .my-field
es un selector para su elemento de entrada de autocompletar.
Puedes intentar usar esto:
$(''.foo'').live(''focus.autocomplete'', function() {
$(this).autocomplete({...});
});
Puedes simplemente poner el evento en vivo dentro de la autocompletar, así:
$(''#input-element'').live(''input'', function(){
$("#input-element").autocomplete(options);
});
Si está utilizando jquery.ui.autocomplete.js
intente esto en su lugar
.bind("keydown.autocomplete") or .live("keydown.autocomplete")
si no, usa el jquery.ui.autocomplete.js
y mira si funciona
Si eso no se aplica, no sé cómo ayudarlo.
Solo para agregar, puedes usar el plugin .livequery
para esto:
$(''.foo'').livequery(function() {
// This will fire for each matched element.
// It will also fire for any new elements added to the DOM.
$(this).autocomplete(options);
});
autocompletar no es un evento sino una función que permite la funcionalidad de autocompletar para un cuadro de texto.
Entonces, si puede modificar el js que crea los cuadros de texto dinámicamente para envolver el elemento de cuadro de texto como un objeto jquery y llamar a autocompletar en ese objeto.