Вопрос

Я обнаружил, что использование объявления 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 ?

Это было полезно?

Решение

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

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

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

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

... и JavaScript

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

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

Вы увидите три окна с предупреждениями, показанные в следующем порядке: " Me First!, " & Quot; 1, & Quot; и "2."

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top