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