конфликты jquery и прототипа - PullRequest
       17

конфликты jquery и прототипа

2 голосов
/ 15 февраля 2012

Я знаю, что этот вопрос задавался много раз, и я искал stackoverflow и google для ответов, но ни один из них не работал для меня, поэтому, возможно, мои ошибки вызваны в разных областях, в любом случае, вот мой javascript включает

echo "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></script>\n";

echo "<script type=\"text/javascript\" src=\"javascript/watermark.min.js\"></script>\n";
echo "<script type=\"text/javascript\" src=\"javascript/jquery.cycle.js\"></script>\n";
echo "<script type=\"text/javascript\" src=\"http://vjs.zencdn.net/c/video.js\"></script>\n";

echo "<script type=\"text/javascript\" src=\"javascript/prototype.js\"></script>\n";
echo "<script type=\"text/javascript\" src=\"javascript/scriptaculous.js?load=effects,builder.js\"></script>\n";
echo "<script type=\"text/javascript\" src=\"javascript/lightbox.js\"></script>\n";

echo "<script type=\"text/javascript\" src=\"javascript/jquery.userdrive.js\"></script>\n";

всякий раз, когда я помещаю prototype.js, scriptaculous.js и lightbox.js после библиотеки jQuery, мой userdrive не работает, и когда я помещаю его раньше, он работает, но не полностью. Я знаю, что между знаками $ есть конфликт, но я не знаю, как это исправить. Кроме того, мой userdrive включает вызовы ajax и код для сортируемой сетки.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Используйте возможность noConflict:

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });
  // Code that uses other library's $ can follow here.
</script>

Убедитесь, что вы включили библиотеку jQuery ДО этого кода, вот документ по нему:

http://api.jquery.com/jQuery.noConflict/

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

Если в вашем userdrive.js используется глобальная переменная "$" без замыкания, произойдет сбой, поскольку prototype.js удалит ссылку между "$" и "jQuery"

Это класс:

(function($){
  ...
})(jQuery)

Попробуйте поместить свой userdrive в закрытие и использовать метод noConflict для предотвращения других ошибок.

<script type="text/javascript">
  jQuery.noConflict();
</script>
...