2009-09-16 5 views
2

Я обнаружил, что использование объявления jQuery Autocomplete в качестве первой функции в вашем скрипте предотвращает выполнение других функций.Несколько функций 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?

+0

Это должно работать, я делаю это все время. Возможно ли, что ошибка в одной из функций мешает другим стрелять? – stimms

+3

@Wraith Monster: попробуйте заменить автозаполнение и предложите вызовы функций с чем-то более простым и гарантированным для работы (я предлагаю оповещения). Если предупреждения срабатывают без проблем, вы можете сузить проблему до другой области. –

+0

Вопрос об этике: ответ Дэвида действительно работает, и это привело меня к тому, что их проблема связана с «автозаполнением», но общий код не работает. Создать новый поток или изменить его? –

ответ

3

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

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

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

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

... и JavaScript

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

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

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

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

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

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

Имейте в виде, что это не удаляет обработчик щелчка назначено каким-то другой путь (т.е. атрибут OnClick в разметки).

+0

$ (function() {...}); является ярлыком для $ (document) .ready (function() {...}) ;. См. Http://docs.jquery.com/Core/jQuery#callback – kevingessner

+0

@kevingessner: вы вычитали меня? Это немного сильное. –

+0

$ (function() {}) является сокращением для $ (document.ready (function() {})). Кажется, что версия OP должна работать? – womp

Смежные вопросы