Pregunta

Descubrí que el uso de declarar jQuery Autocomplete como la primera función en su script impide otras funciones de ser ejecutado.

Las funciones segunda y tercera a continuación no funcionarán:

<script>
$(function() {
    $("#ent_input").autocomplete('get_suggestions', 
        {autoFill: true, scroll: false});
});

    // Freebase Suggest
$(function() {
    $("#ent_input_fb").suggest({type:'/film/director'});
});

$(function() {
    $("#ent_input_fb2").suggest({type:'/film/actor'});
});
</script>

Sin embargo, si muevo el autocompletado al final, el otro script funciona, pero el autocompletado no.

<script>
    // Freebase Suggest
$(function() {
    $("#ent_input_fb").suggest({type:'/film/director'});
});

$(function() {
    $("#ent_input_fb2").suggest({type:'/film/actor'});
});

    $(function() {
    $("#ent_input").autocomplete('get_suggestions', 
        {autoFill: true, scroll: false});
});
</script>

¿Alguien ha tenido problemas similares con jQuery Autocomplete ?

¿Fue útil?

Solución

jQuery debe ejecutar todos sus manejadores $ (function () ...) en el orden en que han sido declarados sin problemas. Parece que sus llamadas a autocompletar y gerir son los culpables.

jQuery es extremadamente cauteloso con los controladores de eventos, y si trató de hacer algo similar a lo anterior con los controladores de clic, notará que también se ejecutan en secuencia (en lugar de sobrescribirse entre sí). Pruébalo:

Suponga que someElement está marcado de la siguiente manera:

<span id="someElement" onclick="alert('Me First!');" />

... y el JavaScript

$("#someElement").click
(
  function()
  {
    alert("1");
  }
);

$("#someElement").click
(
  function()
  {
    alert("2");
  }
);

Verá tres cuadros de alerta que se muestran en el siguiente orden: "¡Yo primero!" " 1 " y " 2. "

jQuery hace un esfuerzo adicional para retener sus controladores onclick marcados como la primera función en hacer clic cuando ocurre el evento. Esto hace que sea muy seguro usar esta biblioteca con tecnología del lado del servidor como ASP.NET, que rocía controladores onclick por todas partes.

Para eliminar todos los controladores de eventos de clic asignados por jQuery de un elemento, haga lo siguiente:

$("#someElement").unbind("click");

Tenga en cuenta que esto no elimina un controlador de clic asignado de otra manera (es decir, el atributo onclick en el marcado).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top