2014-12-31 2 views
1

У меня есть нижний слушатель для класса .my-class (я использую плагин путевой точки). Однако, если я попытаюсь позвонить $(this).addClass("hello"), он не добавит класс к отдельному div, у которого есть класс, и уволил слушателя.«this» не будет ссылаться на div в прослушивателе JQuery

С другой стороны, если я вместо этого вызываю $(".my-class").addClass("hello") внутри функции, он добавляет класс hello ко всем экземплярам .my-class, чего я не хочу.

Я неверно истолковал, как должен использоваться this (я новичок в JS)? Должен ли он ссылаться на единственный div, который запускает слушателя и, следовательно, добавляет класс к этому div?

$(".my-class").waypoint(function(e) { 
    $(this).addClass("hello"); 
}) 
+0

Я не уверен. Не могли бы вы попробовать разместить JSFiddle? – RickyAYoder

+0

Попробуйте 'console.log ($ (this))', чтобы точно увидеть, что такое '$ (this)'. Это может быть немного трудно читать, но все равно поможет. –

+2

Стандарт jQuery - это выполнение вспомогательных функций с рассматриваемым элементом как контекст 'this'. Однако '.waypoint()' - это код плагина, а не код ядра jQuery, поэтому они не могут следовать этому соглашению. Контекст 'this' будет таким, каким был его плагин. – ajp15243

ответ

6

При использовании waypoint, this относится к объекту путевой точки. Элементом объекта waypoint является текущий div. Таким образом, вы хотели бы использовать

$(".my-class").waypoint(function(e) { 
$(this.element).addClass("hello"); 
}) 
+0

Имеет смысл; Я соглашусь, когда смогу. – ujvl

+1

@ uj- - Здесь есть руководство по использованию расширения jQuery, если вы заинтересованы: http://imakewebthings.com/waypoints/guides/jquery-zepto/ –

+0

Спасибо, я посмотрю. – ujvl

0

От АНИ документы, у них есть фрагмент кода, как это: this.element

var waypoints = $('#options-only').waypoint({ 
    handler: function(direction) { 
    notify(this.element.id + ' hit') 
    } 
}) 

так что вам может понадобиться, чтобы сделать $ (this.element), или, возможно, уже является объектом jquery? Я мало знаю о путевой точке.