2016-01-01 4 views
2

Я конвертирую мой проект для использования ES2015, но я столкнулся с проблемой, когда дело доходит до обработчика события jQuery .on, с ключевым словом 'this' естественно ..jQuery .on обработчик события и ES2015 функция стрелки

Вот мой пример кода:

$(".actionBtns").on('click', '.editButton', this.handlerEditBtnClick) //Would give 'this' the value of the button clicked 
 
$(".actionBtns").on('click', '.editButton',() => {this.handlerEditBtnClick()}) //Would give 'this' the value of the class

Я не уверен, как я должен переписать первую строчку в коде выше, чтобы использовать ES2015.

В функции handlerEditBtnClick мне нужно «это» быть классом, но я также хочу получить доступ к нажатой кнопке.

Моя попытка (вторая строка в приведенном выше коде) не дает мне доступ к элементу кнопки DOM, который был нажат - по крайней мере, я никак не могу получить доступ к нему.

Спасибо,

Лука

Редактировать Это функция handlerEditBtnClick():

handlerEditBtnClicked() { 
 
    var $item = $(this); //This isn't re-written yet, so 'this' actually refers to the edit button that was clicked 
 
    this.editItem($item); //This is where I need 'this' to be the class 
 
}

Вы можете увидеть, где мне нужно 'это' в быть двумя разными вещами .. Я не совсем Конечно, как вызвать функцию editItem изнутри handlerEditBtnClick, кроме this.editItem();

Пожалуйста, обратите внимание, что имена только общие имена, для удобства печатая

+0

Я предполагаю, что причина для перезаписи заключается в том, что я хочу, чтобы это было как класс, в котором находится функция. Я собираюсь обновить свой вопрос с помощью большего количества кода, чтобы показать, почему я хочу это сделать – Denno

ответ

2

в $(".actionBtns").on('click', '.editButton',() => {this.handlerEditBtnClick()}) handlerEditBtnClick функции вызываются в diffarent контекста (this относится к классу),
, потому что ()=>{} эквивалентно function(){}.bind(this) так что вы можно сделать либо

$(".actionBtns").on('click', '.editButton',() => {this.handlerEditBtnClick()})

или

$(".actionBtns").on('click', '.editButton', this.handlerEditBtnClick.bind(this))

затем получить доступ к кнопке, которая была нажата, вы всегда можете использовать e.target
(или e.currentTarget в зависимости от ваших потребностей)

function handlerEditBtnClick(e) { 
console.log(e.target); // button that was clicked 
} 
+0

Ahh цель события! Конечно. Спасибо, Бек! – Denno

+0

no worries @ user1560593 :) – Bek

+0

Geez - это мое имя .. Угадайте, я должен выяснить, как его обновить .. – Denno

0

Вы также можете сделать это таким образом (да, Синтаксис ES5):

$('.element').click(function(){ 
    $(this)===$('.element') //true 
}); 

Уместно, потому что jQuery cann ot для переключения функции, когда она написана «стрелка» (после перевода на ES6).

Проверял себя на нескольких конкретных случаях или просто использовал event.target.