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