Проблемы с этим: как получить доступ к элементу и классу внутри функции addEvent? - PullRequest
1 голос
/ 06 августа 2010

Это, вероятно, лучше всего объяснить с помощью некоторого кода. Я знаю, что в следующем примере this внутри метода addEvent - это текущий элемент, содержащийся в массиве elements.

var testClass = new Class({
    testMethod: function() {
        var elements = $$('.elements');
        elements.addEvent('click', function() {
            console.log(this) //This will log the current element from elements
            });
        }
    });

Я также знаю, что в следующем примере this вместо этого относится к классу testClass, потому что я использовал метод связывания.

var testClass = new Class({
    testMethod: function() {
        var elements = $$('.elements');
        elements.addEvent('click', function() {
            console.log(this); //This will log the class testClass
            }.bind(this));
        }
    });

Тогда мой вопрос: как мне одновременно получить доступ к классу и текущему элементу в addEvent?

Обратите внимание, что если бы элементы не были массивом, это не было бы проблематично, поскольку я мог бы передавать элементы в качестве параметра в методе связывания. Однако, поскольку это массив, я не могу этого сделать, так как он просто дал бы мне массив всех элементов вместо текущего элемента. Спасибо!

1 Ответ

3 голосов
/ 06 августа 2010

Вы можете предоставить аргумент аргумента события в функцию-обработчик события, например:

var TestClass = new Class({
  testMethod: function() {
    var elements = $$('.elements');
    elements.addEvent('click', function(e) {
      console.log(this);     // the object instance
      console.log(e.target); // <--- the HTML element
    }.bind(this));
  }
});

MooTools передаст нормализованный объект события в качестве e аргумента вашего событияфункция-обработчик, там вы можете получить доступ к свойству e.target, которое будет ссылаться на элемент DOM, который вызвал событие.

...