2009-06-25 136 views
0

我想獲取對單元格的引用,它看起來爲空。如果我正確理解它,我應該能夠引用該變量。正確?Javascript關閉範圍問題

$('td[someAttr]').mouseenter(function(cell) { 
    var timeoutId = setTimeout(function() { 
     // what should variable cell be? 
    }, 1000); 
}); 

OR

$('td[someAttr]').mouseenter(function(cell) { 
    var timeoutId = setTimeout(function() { 
     // what should variable cell be? 
    }, 1000, cell); 
}); 

UPDATE:這是顯而易見的,但我問其原因,這是因爲cell.pageX會,如果你有是不確定的:,

$('td[someAttr]').mouseenter(function() { 
    var cell = this; // 
    var timeoutId = setTimeout(function() { 
     alert(cell.pageX); // cell.pageX will return null 
    }, 1000); 
}); 

但是,如果你有:

$('td[someAttr]').mouseenter(function(cell) { 
    alert(cell.pageX); // works fine as cell.pageX will have correct value. 
}); 

回答

4

事件處理程序的上下文設置爲觸發事件的元素。你可以在這樣說:

$('td[someAttr]').mouseenter(function() { 
    var cell = this; 
    var timeoutId = setTimeout(function() { 
     alert(cell.tagName); 
    }, 1000); 
}); 

您可能還需要將其包裝成一個jQuery對象,以及:var cell = $(this);

UPDATE:第一個參數是事件對象,而不是元素。該元素被設置爲回調(即此)的情況下,你可以訪問該事件對象正是你在你的榜樣方式:

$('td[someAttr]').mouseenter(function(event) { 
    var cell = this; 
    var timeoutId = setTimeout(function() { 
     alert(cell.tagName + ' ' + event.pageX); 
    }, 1000); 
}); 

注意「Cell」元素也可作爲「event.target」訪問。

+0

這是顯而易見的,但我之所以問這是因爲cell.pageX是未定義的,我會發布更新並告訴你我的意思。 – 2009-06-25 21:46:34