2009-06-25 9 views
0

Ich versuche, einen Verweis auf Zelle zu erhalten, und es scheint Null. Wenn ich es richtig verstehe, sollte ich in der Lage sein, auf die Variable zu verweisen. Richtig?Javascript Scoping Problem

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

ODER

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

UPDATE: Dies war offensichtlich, aber der Grund, warum ich diese gefragt war, weil cell.pageX undefiniert sein würde, wenn Sie hatte:

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

Wenn jedoch Sie hatten:

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

Antwort

4

Der Kontext des Ereignishandlers wird auf das Element gesetzt, das das Ereignis ausgelöst hat. Sie können es auf diese Art und Weise erhalten:

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

Sie es auch als ein jQuery-Objekt wickeln mögen auch: var cell = $(this);

UPDATE: Das erste Argument ist das Ereignisobjekt, nicht das Element. Das Element wird als Rahmen des Rückruf (dh diese) gesetzt, und Sie können die Art und Weise genau Zugriff auf das Ereignisobjekt erhalten, die Sie in Ihrem Beispiel waren:

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

Beachten Sie, dass die „Zelle“ Element ist auch zugänglich als "event.target".

+0

Das war offensichtlich, aber der Grund, warum ich das fragte war, weil cell.pageX undefiniert sein würde, werde ich ein Update posten und Ihnen zeigen, was ich meine. –

Verwandte Themen