Несколько функций jQuery и автозаполнение - PullRequest
2 голосов
/ 16 сентября 2009

Я обнаружил, что использование объявления jQuery Autocomplete в качестве первой функции в вашем скрипте предотвращает выполнение других функций.

Вторая и третья функции ниже не будут работать:

<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>

Однако, если я переместлю автозаполнение вниз, другой сценарий сработает, а автозаполнение - нет.

<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>

Кто-нибудь сталкивался с подобными проблемами с jQuery Autocomplete ?

1 Ответ

3 голосов
/ 16 сентября 2009

jQuery должен выполнить все ваши обработчики $(function()...) в том порядке, в котором они были объявлены без проблем. Похоже, ваши звонки autocomplete и suggest являются виновниками.

jQuery крайне осторожен с обработчиками событий, и если вы попытались сделать что-то похожее на описанные выше с обработчиками щелчков, вы заметите, что они тоже выполняются последовательно (а не перезаписывают друг друга). Попробуйте:

Предположим, что someElement размечен следующим образом:

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

... и JavaScript

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

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

Вы увидите три окна с предупреждениями в следующем порядке: «Я первый!», «1» и «2».

jQuery делает все возможное, чтобы сохранить размеченные обработчики onclick как первую функцию, которая щелкает при возникновении события. Это делает очень безопасным использование этой библиотеки с серверной технологией, такой как ASP.NET, которая разбрасывает обработчики onclick повсюду.

Чтобы удалить все назначенные jQuery обработчики событий щелчка из элемента, выполните следующие действия:

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

Имейте в виду, что это не удаляет обработчик щелчка, назначенный другим способом (т. Е. Атрибут onclick в разметке).

...