Небольшое лирическое отступление. Исторически сложилось так, что в нашем сервисе до сих пор используется jQuery Autocomplete v.1.1 ещё с тех времён, когда автокомплит не был частью jQuery UI. Его использование — отдельная и достаточно больная тема, не имеющая прямого отношения к теме поста :)
В первую очередь идём на «боевой» сервис и смотрим на место где происходит подписка на нужное событие.
h.bind((d.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(c) {...});
Ага, уже что-то, что теоретически может вызвать поломку. Стоит посмотреть, актуальна ли такая проверка для последних версий Оперы. Недолгое гугление приводит на страницу со спецификациями движка Presto, где в чейнджлоге к версии 2.10 нам радостно сообщают, что клавиши навигации больше не рейсят событие keypress.
Объяснение почему навигация по списку не работает найдено довольно быстро. Но по-прежнему не ясно, почему всё замечательно на тестовой площадке. Дебажимся там и находим уже знакомое место подписки на keypress/keydown
h.bind((d.browser.opera && !('KeyboardEvent' in window) ? "keypress" : "keydown") + ".autocomplete", function(c) {...});
Стоп. Что это ещё за дополнительное условие? Проверка на KeyboardEvent позволяет нам задетектить Оперы версий младше 12, когда событие keypress для навигационных клавиш ещё работало. Только вот никто из разработчиков его туда не вставлял :)
Протираю глаза и на всякий случай открываю jquery.autocomplete.js в Visual Studio. Всё в порядке, никаких "!('KeyboardEvent' in window)" нет и в помине. А если дать файлу любое другое произвольное имя, то и Опера перестанет вставлять в него свои костыли. Это же объясняет почему хак не работает на боевой площадке — при деплое скрипты комбайнятся в один минимизированный файл и браузер не может распознать автокомплит. Даже боюсь подумать, в какое количество скриптов они вставляют таким образом свои костыли :)
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:
- Massacres That Matter - Part 1 - 'Responsibility To Protect' In Egypt, Libya And Syria
- Massacres That Matter - Part 2 - The Media Response On Egypt, Libya And Syria
- National demonstration: No attack on Syria - Saturday 31 August, 12 noon, Temple Place, London, UK
Комментариев нет:
Отправить комментарий