Várias funções de jQuery & Autocomplete
-
07-07-2019 - |
Pergunta
Descobri que usando declarando jQuery Autocomplete como a primeira função em seus impede de script outras funções de ser executado.
A segunda e terceira funções abaixo não funcionará:
<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>
No entanto, se eu mover autocomplete para o fundo, as outras obras de script, mas autocomplete não.
<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>
Tem alguém correr em quaisquer problemas semelhantes com jQuery Autocomplete ?
Solução
jQuery deve executar todos os seus manipuladores $(function()...)
na ordem em que foram declaradas sem problema. Parece que as suas chamadas para autocomplete
e suggest
são os culpados.
jQuery é extremamente cauteloso sobre manipuladores de eventos, e se você tentou fazer algo semelhante ao anterior com manipuladores clique você vai notar que eles também executar em sequência (em vez de substituir uns aos outros). Experimente:
Suponha someElement marcado como segue:
<span id="someElement" onclick="alert('Me First!');" />
... eo JavaScript
$("#someElement").click
(
function()
{
alert("1");
}
);
$("#someElement").click
(
function()
{
alert("2");
}
);
Você verá três caixas de alerta apresentados na seguinte ordem:. "Eu primeiro !," "1" e "2"
jQuery vai a milha extra para reter seus marcaram os manipuladores onclick como a primeira função de clicar quando o evento ocorrer. Isto torna muito seguro para usar esta biblioteca com tecnologia do lado do servidor, como ASP.NET, que borrifa manipuladores onclick em todo o lugar.
Para remover todos os manipuladores de eventos de clique jQuery-atribuídos a partir de um elemento, faça o seguinte:
$("#someElement").unbind("click");
Tenha em mente que isso não remover um manipulador de clique atribuído alguma outra forma (ou seja, o atributo onclick na marcação).