Задать вопрос
CodeByZen
@CodeByZen
php, js, my/mssql, sqlite, html, css, it-consult

Рекурсия при вызове метода в плагине для jQuery?

Опираясь на этот перевод начал писать плагин (сладйер картинок).

Вообщем суть не в том, что делает плагин, а в том как.



Мне надо многократно вызвать один и тот-же метод плагина. Но тут у меня возникает ошибка. Алгоритм в методе следующий: Анимирую объект DOM -> автоинкремент переменной в data -> delay -> вызов этого же метода.



При втором вызове $(this) у меня undefined. — Не понимаю почему.



Но есть у меня предположение, что так делать неправильно, у меня не соовсем хороший алгоритм. Подскажите как написать правильно. Заранее спасибо.
  • Вопрос задан
  • 3741 просмотр
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Akuma
@Akuma
Веб-программист
Скорее всего Вы вызываете метод как
methods.any();

А что если попробовать так?
methods.any.call(this);
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Мне кажется вы изначально что-то не так сделали. вам стоит подучить раздел JavaScript по поводу контекста функции.

jsfiddle.net/kpVJv/ — из любопытства набросал простенький пример слайдера в виде jQuery плагина (самый простой, ничего инетересного), но может быть вы чего найдете интересного.
Ответ написан
@kotia
Без кода трудно сказать наверняка, но первым делом — не стоит использовать $(this), лучше обращаться к ноде более явно. В случае с евентом, например — через e.target
Ответ написан
hell0w0rd
@hell0w0rd
Просто разработчик
Разве внутри плагина обращение к объекту не через this, а не $(this), или я путаю?
Ответ написан
medved13
@medved13
Ведущий front-end разработчик
setTimeout("$('"+data.id+"').myPlugin('next')", data.timeout);

Это не очень хорошее решение.
1) Вы передаёте стрингу, которая фактически эвалится.
2) В качестве выполняемой функции каждый раз будет дёргаться заново движок селекторов. И хотя это самый простой селектор, по id, это всё равно время и ресурсы.

Если очень хочется именно так написать, то:
var myPlugin = $(data.id).myPlugin
setTimeout(function(){ myPlugin('next') }, data.timeout);


developer.mozilla.org/ru/docs/DOM/window.setTimeout
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽