Javascript закрытие вопроса - PullRequest
0 голосов
/ 26 июня 2009

Я пытаюсь получить ссылку на ячейку, и она выглядит пустой. Если я правильно понимаю, я смогу ссылаться на переменную. Правильно?

$('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 Ответ

4 голосов
/ 26 июня 2009

Контекст обработчика события установлен для элемента, который вызвал событие. Вы можете получить это следующим образом:

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

Вы также можете обернуть его как объект jQuery: var cell = $(this);

ОБНОВЛЕНИЕ: первый аргумент - это объект события, а не элемент. Элемент устанавливается в качестве контекста обратного вызова (то есть этого), и вы можете получить доступ к объекту события точно так же, как вы это делали в своем примере:

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

Обратите внимание, что элемент "cell" также доступен как "event.target".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...