Плагин jQuery применяется только к последнему объявленному элементу - PullRequest
0 голосов
/ 06 марта 2009

Я написал плагин jQuery для управления анимацией для нескольких изображений на одной странице. Звонки инициализируются в начале как:

$ ("# image1"). Anims ({top: "240px", слева: "300px"});

$ ("# image2"). Anims ({top: "160px", слева: "430px"});

Плагин anims в основном применяет множество анимаций при наведении и наведении мыши (с использованием наведения) на основе предоставленных верхнего и левого параметров. Однако, как только все загружается в Safari, при наведении на # image2 происходит анимация # image1 с параметрами, установленными для # image2. Наведение над # image1 анимирует # image1, как и должно быть, с параметрами, установленными для # image1, как и должно быть. В Firefox все наоборот. Я думаю, это связано с порядком их загрузки или чем-то подобным.

Что я мог сделать не так? Я использую $ (this) во всем плагине для animate () и других различных вызовов.

Ответы [ 3 ]

1 голос
/ 06 марта 2009

Я решил свою проблему. Внутри моего плагина я написал:

img = $ (this);

, а затем использовал переменную img для управления всем после этого. Меняя его на:

var img = $ (this);

решил мои проблемы. Глупая ошибка.

0 голосов
/ 26 марта 2009

Вы также можете найти эту статью , которая объясняет общую проблему JavaScript, когда какое-либо действие применяется только к последнему элементу выбора / массива или вы получаете последний идентификатор / атрибут вашего выбора.

0 голосов
/ 06 марта 2009

Я бы дважды проверил все пункты маркированного списка на этой странице: http://docs.jquery.com/Plugins/Authoring

  • Назовите ваш файл jquery. [Вставьте имя плагина] .js, например. jquery.debug.js
  • Все новые методы присоединены к объекту jQuery.fn, все функции к jQuery объект.
  • внутри методов, 'this' является ссылкой на текущий jQuery объект.
  • Любые методы или функции, которые вы присоединяете, должны иметь точку с запятой (;) в конце - в противном случае код сломается, когда сжатая.
  • Ваш метод должен возвращать объект jQuery, если не указано иное в противном случае.
  • Вы должны использовать this.each для итерации по текущему набору совпадающих элементы - он производит чистый и совместимый код таким образом.
  • Всегда используйте jQuery вместо $ внутри кода вашего плагина - это позволяет пользователи могут изменить псевдоним для jQuery в одном месте. Смотрите ниже для объяснение и более элегантный решение.

Например, вы говорите, что используете $(this), но вы должны использовать jQuery(this). Я сомневаюсь, что это проблема, но вы должны внимательно следить за документацией на случай непредвиденного поведения, вызванного несоблюдением одного из них. Вы возвращаете объект jQuery?

Кроме того, вам действительно нужно опубликовать исходный код вашего плагина anims, чтобы мы могли попытаться выяснить, что может быть не так.

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