Я использую dijit.form.FilteringSelect
, поддерживаемый dojox.data.QueryReadStore
, чтобы позволить пользователю выбрать регион (подумайте о механизме «автозаполнения»). Для каждого символа, введенного пользователем, QueryReadStore
отправляет запрос на сервер в ожидании списка соответствующих областей json (со связанными идентификаторами). К тому времени, когда отображается достаточно короткий список, пользователь выбирает нужный элемент. [Следует признать, что запросы при каждом нажатии клавиши - не самый эффективный шаблон, но на данный момент этого достаточно.]
Неожиданное поведение: в некоторых редких, но особых случаях выбор, сделанный пользователем, «не прилипает». Например, если пользователь вводит «can
», ему предоставляется следующий выбор в следующем порядке:
Atlantic Canada
Canada
English Canada
Lower Canada
Upper Canada
Western Canada
Если она выбирает среди них «Canada
», дижит закрывает выпадающий выбор, правильно выбрав свой выбор. Но к тому времени, как пользователь покидает поле, выбор переключается на «Atlantic Canada
»!
Это странное явление происходит систематически для небольшого числа конкретных регионов. (Сначала я подумал, что общий фактор между этими плохо ведущимися регионами заключался в том, что в их названии содержались акцентированные символы или дефисы, но явно не так, как в случае с канадским примером. Пока что мне не удается обнаружить регулярный шаблон.)
Я не нашел упоминаний о подобной проблеме нигде. Я вполне готов исследовать, но, поскольку я новичок в додзё, я был бы очень признателен за указатели, прежде чем прибегнуть к углублению в код додзё: где мне сначала взглянуть? Каковы некоторые вероятные проблемы, которые могут вызвать такое поведение? Могу ли я исключить определенные гипотезы? Как мне лучше всего использовать консоль (или Firebug), чтобы добраться до сути этого? и т.д.
Проблема возникает как с dojo 1.1.1, так и с dojo 1.2.3.
Вот (программное) поколение FilteringSelect
:
new dijit.form.FilteringSelect({
name = "region";
autoComplete = false;
hasDownArrow = false;
labelAttr = "name";
queryExpr = "${0}";
store = new dojox.data.QueryReadStore({url:'/query/regions'});
}, myNode);
РЕДАКТИРОВАТЬ (2009/02/18): Дополнительные сведения
После ответа Дамелина я хотел понять, что FilteringSelect
увидел в этой ситуации. Предположим, что я подключаю функции регистрации к событиям FilteringSelect
onChange
и onBlur
, я получаю следующую последовательность воспроизведения:
- Я нажимаю в поле и набираю:
can
- Появляется раскрывающийся список 6 регионов (перечисленных выше)
- с помощью курсоров клавиатуры я перемещаюсь вниз по списку до «
Canada
» (это регион с идентификатором 1)
Я нажимаю Enter
(таким образом выбирая пункт магазина). Раскрывающийся список к настоящему времени исчез, и в поле появляется текст "Canada
". В этот момент запускается первое событие со следующим журналом:
onChange event: region 1
Я покидаю поле, нажимая tab
. Здесь два события запускаются одно за другим в следующем порядке:
onBlur event: region 1
onChange event: region 246
(регион 246 - Atlantic Canada
.) Это очень интересно ... К тому времени, как я покидаю поле (onBlur), Canada
все еще остается выбранным значением. Таинственный обмен происходит только после этого ...