Задумал для 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