Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Почему глобальная переменная JavaScript во всех функциях видна, а в JQuery-плагине autocomplete нет?

Задумал для jQuery-плагина autocomplete добавить фильры. Т.е. сделать так, чтобы пользователь мог сначала выбрать какие autocomplete-подсказки ему нужны. Т.к. autocomplete отслеживает только свой <input type="text" id="autocomplete_id" /> то придумка состояла в том, чтобы через onclick отслеживать какой фильтр выбрал пользователь, присваивать при этом глобальную JavaScript-переменную, и передавать ее через source: "/autocomplete?" на сервер, который будет выдавать autocomplete-подсказки в соответствии с выбранным фильтром.

Но увы. Почему-то во всех функциях эта глобальная переменная видна, а через source: "/autocomplete?" не передается. Код примерно следующий:

<script type="text/javascript">

var filter="cats_and_tits";  // фильтр по умолчанию

function set_filter( s ){
    alert(window.filter);
    window.filter = s;
    alert(window.filter);
};

$(document).ready(function(){
    $('#autocomplete_id').autocomplete({
       source: "/autocomplete?use_filter=" + window.filter , // обработчик 
       minLength: 5, // мин. длина срабатывания автозаполнения
       delay: 600
    });
});
 </script>

В форме на radio-botton стоит что-то вроде onclick="set_filter('only_cats');" и onclick="set_filter('only_tits');" и аллерты показывают, что глобальная переменная window.filter при кликании меняет состояние. Но внутри серверного обработчка автозаполнения, через GET-переменную use_filter эти значения не приходят! Приходит значение указанное по умолчанию (см.: var filter="cat_and_tits";).

Почему? Как исправить?

P.S. Вся форма в которой находится и поле автозаполнения, и переключатели фильтров, и submit-обработчик формы, и JavaScript находятся в отельном файле '/popup_form'), который подгружается внутрь <div id="box"></div> из родительского html-файла. Как-то так:
$(document).ready( function(){ $('#box').load('/popup_form'); } );

Возможно ли, что проблема в этом?

UPD: --------------------------------------------------------(ответ)----
Оказалось, что при вызове function set_filter( s ) надо каждый раз заново инициализировать автокомплит. Примерно так:
function set_filter( s ){
    $('#autocomplete_id').autocomplete(
         "option",
         "source",
         "/autocomplete?use_filter=" + s
       );
};
В результате получилось вот такой автокомплит: oknardia.ru
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
romy4
@romy4
Exception handler
А если сделать window.filter = "cat_and_tits"; сразу?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы