2010-09-06 3 views
2

Я только что реализовал многоязычный мод на своем сайте.Конфликты JQuery/Javascript?

Проблема в том, что существует конфликт между файлами javascript из языкового мода и файлами javascript, которые уже были на странице.

<!-- language files here --> 
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> 
<script type="text/javascript" src="js/translationEngine.js"></script> 
<script type="text/javascript" src="js/jquery.cookie.js"></script> 
<script type="text/javascript" src="js/jquery.translate-1.3.9.min.js"></script> 
<script>var browserlang = 'en';</script> 


<!-- Javascript --> 

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="js/jquery.pngFix.pack.js"></script> 
<script type="text/javascript" src="js/jquery.flow.1.2.min.js"></script> 
<script type="text/javascript" src="js/jquery.prettyPhoto.js"></script> 
<script type="text/javascript" src="js/concept.js"></script> 

JS/JQuery-1.3.2.min.js, что делает ползунок 3 изображений на домашней странице работе, но ... это, кажется, также конфликтует с функциями переводчика.

Если вы удалите js/jquery-1.3.2.min.js со страницы, переводчик отлично работает, но ползунок больше не работает.

удаление js/jquery-1.4.2.min.js со страницы не делает работу переводчика, на самом деле это вызывает больше ошибок в обратном направлении.

Может ли кто-нибудь вести меня в правильном направлении, что позволило бы мне заставить переводчика языка и слайдера изображений работать?

http://filefx.com

Спасибо :)

ответ

4

Короткая версия, чтобы удалить это:

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 

и обновлять плагины, есть вероятные версии 1.4.x там для каждого из них. Включив jQuery во второй раз, как вы сейчас, он уничтожит плагины и вызовет всевозможные проблемы ... первый шаг - удаление второго (надеюсь, более старого) экземпляра.

Редактировать: Вот обновленная версия jFlow под названием jFlow plus, которая работает с 1.4.2.

+0

Не должно быть много нарушений от 1.3.2 до 1.4.2? – mpen

+0

@Mark - Не должно быть, но похоже, что плагин jFlow имеет некоторый разрыв ... но сайт плагина находится в автономном режиме в данный момент, поэтому я не могу предоставить ссылку на текущую версию: http: // plugins .jquery.com/project/jFlow –

+0

* Не должно быть * -> последние слова разработчика: P – alex

4

ЗАКАНЧИВАТЬ noConflict функция JQuery. Эта функция сообщает jQuery об отказе от ее контроля над переменной $. Таким образом, другие библиотеки могут использовать его.

Онлайновые документы дают довольно хорошее руководство по использованию этой функции. Это спасло меня несколько раз.

Пример из онлайн-документации:

<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> 

В основном, когда вы звоните noConflict, вы все еще можете использовать JQuery, просто использовать его, используя имя переменной jQuery вместо $.

Надеюсь, это поможет!

+2

'.noConflict()' на самом деле не помогает ситуации с наличием нескольких библиотек ** jQuery ** на странице, они вообще не играют хорошо, они предназначены для использования с jQuery и * другой * библиотекой , –

+1

Я знаю, что это ускользает ... Я не знаю, почему, для тех, кто находит это позже: * это не решит проблему *, переменная 'jQuery' переопределяется при втором включении библиотеки jQuery. Это как лишняя, так и более медленная страница, а также не будет правильно решает проблему. –

+1

Я согласен с @Nick. Вы не можете определить переменную со значением, * переписать * эту переменную с новым значением, а затем ожидать 'noConflict()' (или любой другой метод, если на то пошло), чтобы вы могли ссылаться на старое, перезаписанное значение. Метод 'noConflict()' разрешает конфликты с 'window. $', А не с 'window.jQuery'. – user113716

0

В результате я просто изменил порядок загрузки библиотек.

Я разрешаю загрузке всех загружаемых библиотек jquery, от самых новых до самых старых. Затем я вызвал файлы javascript, которые полагаются на jquery.

Теперь он отлично работает.

+1

Это не отличный подход ... это гораздо более тяжелая страница для вашего клиента. Почему * не * просто обновить плагин потока (я предоставил обновленную ссылку на мой ответ), оставьте JQuery 1.3.2 и сделайте вашу страницу легче и быстрее для ваших пользователей? –

+0

Я, это была бы отличная идея. lol ok, используя ваш метод сейчас. – jiexi

1

Я всегда решал конфликты между двумя версиями jquery, например. jQuery 1.3.2 и jQuery 1.4.2 на одной странице с использованием iframes, но недавно я узнал, что вы можете использовать только версию jquery-1.5.1.js, и все работает нормально.

1

меняю все .js файл на странице используется снизу код:

<script> 
var K = jQuery.noConflict(); 
    alert(K); 
    jQuery(document).ready(function() { 

     alert("Bye"); 
    }); 
</script> 

Теперь работает отлично.

Смежные вопросы