2012-02-15 4 views
2

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

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

Оформить заказ: http://api.jquery.com/jQuery.noConflict/ должен иметь то, что вы ищете. Также будьте осторожны при включении разных библиотек, которые переопределяют базовые прототипы, поскольку они могут вызывать несовместимость. – dennmat

ответ

1

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

Это Clousure:

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

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

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

так что поместите все в userdrive in (function ($) { ... }) (jQuery) ? вместо $ (document) .ready (function() {...}); – Grigor

+0

nop .. положить все ... даже $ (document) .ready –

2

Используйте возможности 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/

+0

, поэтому я должен включить jquery, noConflict(), а затем другие библиотеки? – Grigor

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