Вызывает ли `click ()` в jQuery только события, связанные с jQuery? - PullRequest
3 голосов
/ 15 февраля 2010

У меня есть сайт Magento, который включает прототип библиотеки JavaScript.

Некоторое время назад я также добавил jQuery.

Однако до этого я включил прототип на основе лайтбокса. Это было вызвано добавлением атрибута rel="lightbox[gallery]".

Теперь я бы хотел, чтобы при загрузке страницы отображался лайтбокс. Я не знаю ничего о прототипе, поэтому я попытался создать скрытую ссылку с помощью jQuery и затем вызвать $('#special').click(), но безрезультатно. Однако если я действительно нажму на ссылку, она будет работать нормально.

Все мой код jQuery находится в такой функции

jQuery.noConflict();
jQuery(function($) {
 // Now I can use $ in here... :)

});

Так jQuery click() только запускает события, которые jQuery связал? Если так, как я могу вызвать событие click или вызвать лайтбокс в прототипе?

Ответы [ 5 ]

1 голос
/ 15 февраля 2010

Так что jQuery click () вызывает только те события, которые jQuery связал?

Он также будет запускать события, связанные с помощью атрибутов on<i>EventName</i> старого стиля. Но он не будет запускать события, связанные с помощью addEventListener() или attachEvent() (что, AFAIK, использует Prototype для привязки событий ...)

Однако вы можете имитировать фактическое событие нажатия. Это займет немного больше усилий ...

См .: Как мне смоделировать щелчок по тегу привязки?

См. Также: Запуск события с прототипом

0 голосов
/ 20 февраля 2010

очень простое решение - добавить $ j = jQuery.noConflict в конец исходного файла jquery. тогда в глобальном масштабе вы можете просто использовать $ j и не беспокоиться о переносе функций

0 голосов
/ 15 февраля 2010

Чтобы использовать $, как вы просите, сделайте следующее:

jQuery(function() {
  (function($) {
    //
    // your initialization code goes in here
    // and you can use '$' safely as the name
    // of the jQuery object, even though
    // window.$ is something else
    //
  })(jQuery);
});
0 голосов
/ 15 февраля 2010

При использовании jquery попробуйте использовать jQuery noconflict , чтобы по умолчанию $ относился к прототипу и использовал jQuery, если вы хотите использовать jQuery. Честно говоря, по своему опыту, когда я добавлял две фреймворки и пытался заставить их работать вместе, это всегда проблема и почти ад. Что особенного вы пытаетесь достичь, используя jQuery в проекте, созданном с прототипом?

0 голосов
/ 15 февраля 2010
  1. используйте «jQuery» вместо «$». Функция $ определена как в Prototype, так и в jQuery. возможно вы пытаетесь вызвать метод "click ()" для объекта, выбранного Prototype, который может не работать (я вообще не знаю prototype, за исключением того, что он также определяет функцию "$") (примечание: пожалуйста, посмотрите на http://docs.jquery.com/Using_jQuery_with_Other_Libraries)

  2. Это не совсем отвечает на ваш вопрос, но почему вы не используете лайтбокс для jQuery? ;) http://leandrovieira.com/projects/jquery/lightbox/

...