Javascript关闭范围问题

时间:2009-06-25 21:23:39

标签: javascript jquery scoping

我正在尝试获取对单元格的引用,它显示为null。如果我正确理解它,我应该能够引用变量。正确的吗?

$('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);
});

更新:这很明显但我问这个的原因是因为如果你有的话,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.
});

1 个答案:

答案 0 :(得分:4)

事件处理程序的上下文设置为触发事件的元素。你可以这样做:

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

您可能还想将其包装为jQuery对象:var cell = $(this);

更新:第一个参数是事件对象,而不是元素。元素被设置为回调的上下文(即this),您可以完全按照示例中的方式访问事件对象:

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

请注意,“cell”元素也可以作为“event.target”访问。