Сохранение значения event.clientX в функции обратного вызова setTimeout - PullRequest
1 голос
/ 01 июня 2011

У меня есть эта процедура, которая называется onmouseover определенного элемента.Я хочу, чтобы была небольшая задержка - т.е. дать пользователю время до mouseout до того, как эффект проявится.Эффект использует значение event.clientX.Однако кажется, что к тому времени, когда обратный вызов вызывается - после 500 мс - объект event больше не существует.Как я могу аккуратно сохранить состояние event.clientX?

function showTip(sDivID){
    SHOW_TIP_TIMEOUT_ID = setTimeout(function(){
        var div = $('#'+sDivID).show()[0];
        div.style.left = event.clientX;
    } ,500)
}

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Если вы полагаетесь, что это работает только в Internet Explorer, вы можете просто сохранить значение перед установкой тайм-аута:

function showTip(sDivID) {
  var x = event.clientX;
  SHOW_TIP_TIMEOUT_ID = setTimeout(function() {
    var div = $('#' + sDivId).show()[0];
    div.style.left = x;
  }, 500);
}

Если вы хотите, чтобы это работало для других браузеров, вам придется захватить событие в самом обработчике событий и либо передать его, либо сохранить в глобальном (ick). Поскольку вы используете jQuery, он уже выполняет всю работу по нормализации браузера, поэтому вы должны воспользоваться этим.

1 голос
/ 01 июня 2011

Объект события является глобальным в IE. Потенциальное быстрое разрешение для всех браузеров - если вы просто используете целое число clientX, а не полный объект события, сохраняйте только целое число. Что-то вроде:

function showTip(sDivID, savedClientX){
    SHOW_TIP_TIMEOUT_ID = setTimeout(function(){
        var div = $('#'+sDivID).show()[0];
        div.style.left = savedClientX;
    } ,500)
}
...