Я решил это совершенно случайно, вроде. Я понял, что моя проблема на самом деле не в отставании, а в симптоме «конфликта событий».
Проблема, насколько я могу судить, заключается в том, что focus()
вызывается либо переходом на ссылку, либо mousedown()
на элементе, который может получить фокус. Таким образом, каждый раз, когда на ссылку нажимают, она получает фокус. Но событие click()
не завершено, пока мышь не будет отпущена. Так что эффект, который я видел в Firefox и IE, был результатом небольшой задержки между mousedown()
и mouseup()
. Я попытался просто поменять обработчик событий .click()
в моем коде на mousedown()
, и, поскольку это всего лишь одно событие, которое я ожидал, я решил интегрировать это в свою функцию hoverState (). Я закончил с этим:
function hoverState(e) {
var index = $(e.target.parentNode).prevAll().length;
if (e.type == 'mousedown') {
statePad=Math.pow(10,(4-index))*2;
$(".active").removeClass('active');
$("#"+ e.target.id).addClass('active');
}
else {
var sign = (e.type === 'mouseenter' ||
e.type === 'focus')? 1 : -1;
var placeholder=Math.pow(10,4-index);
if (statePad != placeholder*2)
statePad += (placeholder * sign);
$('h1').text(statePad + " " + e.type);
}
stateChanger(statePad);
}
$("#navbar a").bind("mouseenter mouseleave focus blur mousedown", hoverState);
Однако, это вызвало странное поведение, которое испортило переменную statePad. Я вернулся к коду, который предоставил Расс Кэм, и начал переосмысливать вещи. Я попробовал это в Опере, что я еще не сделал, и это работало отлично. Я попробовал это в Safari и Chrome, и они работали нормально, как обычно. Я попробовал это в Firefox, просто пытаясь понять, что отличает его, и ... это работало!
Я оглянулся на свой код, и оказалось, что я все еще связывал функцию hoverState с событием mousedown()
. Я не совсем уверен, почему это работает, но это работает. Это исправляет проблему и в IE. Задушить, это вызывает новую проблему в Chrome, это настолько незначительно, что я даже не собираюсь беспокоиться.
Я не думаю, что смог бы решить эту проблему без помощи Русса, поэтому я хочу еще раз поблагодарить его за всю его помощь в этом.