在setTimeout回调函数中保留event.clientX值

时间:2011-06-01 15:31:33

标签: javascript events javascript-events closures

我有这个例程,被称为某个元素的onmouseover。我希望稍有延迟 - 即在效果发生之前给用户时间mouseout。效果使用event.clientX值。然而,似乎在调用回调时 - 在500ms之后 - event对象不再存在。我怎样才能整齐地保持event.clientX的状态?

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

2 个答案:

答案 0 :(得分:2)

如果你只依赖于它,只能在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 :(得分:1)

事件对象在IE中是全局的。所有浏览器的潜在快速解决方案 - 如果您只使用clientX整数而不是完整的事件对象,则只存储整数。类似的东西:

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