У меня есть веб-страница с DIV
s с обработчиком mouseover
, который предназначен для отображения всплывающего информационного пузыря. Я не хочу, чтобы одновременно отображалось более одного информационного пузыря. Но когда пользователь быстро перемещает мышь по двум элементам, я иногда получаю два пузырька. Этого не должно происходить, потому что код показа всплывающего окна отменяет предыдущее всплывающее окно.
Если бы это была многопоточная система, то проблема была бы очевидной: есть два потока, пытающихся показать всплывающее окно, и они оба отменяют существующие всплывающие окна, а затем выводят свои собственные всплывающие окна. Но я предполагал, что JavaScript всегда выполняется в однопоточном режиме, что предотвратило бы это. Я ошибся? Работают ли обработчики событий асинхронно, и в этом случае мне нужен синхронизированный доступ к общим данным, или вместо этого я должен искать ошибки в коде библиотеки для отмены всплывающих окон?
Отредактировано, чтобы добавить:
- Речь идет о библиотеке SIMILE Timeline и ее библиотеке Ajax;
- Обработчик событий действительно вызывает
SimileAjax.DOM.cancelEvent(domEvt)
, что, как я предполагаю, исходя из имени, отменяет всплывающие сообщения о событиях; - Просто чтобы усложнить ситуацию, я на самом деле запускаю тайм-аут, который, если он не отменен с помощью
moustout
, показывает всплывающее окно, это предназначено для предотвращения раздражающего мерцания всплывающих окон, но раздражающего обратного эффекта.
Я попробую еще раз и посмотрю, смогу ли я понять, где я ошибаюсь. :-)