0

セルへの参照を取得しようとしていますが、null に見えます。正しく理解していれば、変数を参照できるはずです。正しい?

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

また

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

1 に答える 1

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」としてもアクセスできることに注意してください。

于 2009-06-25T21:28:22.033 に答える