Подтвердить что ты не робот

Конфликты JQuery с файлами?

Я включил JQuery1.5 в заголовок страницы JSF. На этой странице есть куча компонентов Primefaces, уже закодированных. После того, как я включил Jquery.js в заголовок страницы, некоторые компоненты таких элементов, как <p:commandButton>, теряют свой скин, а <p:fileUpload> становится похожим на обычный JSP <input type="file"> и полностью утрачивает способность AJAX.

Есть ли способ безопасно использовать JQuery вместе с первичными (без конфликтов)?

4b9b3361

Ответ 1

У меня была та же проблема, что и в вопросе. Вот почему я придумал следующее решение:

Включить встроенную библиотеку jQuery (в настоящее время 1.4.1) в качестве встроенной библиотеки, в том числе собственную библиотеку jQuery, которая приводит к проблемам форматирования CSS. Добавление атрибута target="head" позволяет указывать тег везде - например. при использовании шаблонов вы не всегда имеете доступ к тегу <head>:

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />

Поверхность jQuery-библиотека включена по умолчанию в режиме конфликта. Это означает, что ярлык $() не может использоваться. Чтобы преодолеть эту проблему, включите следующую строку в тег <script> или <h:outputScript>:

<h:outputScript target="head">
    // Add the $() function
    $ = jQuery;
    // Now you can use it
    $(document).ready(function() {
        ...
    });
</h:outputScript>

Это лучшее решение, которое я мог бы выкопать до сих пор, используя прайс-листы 2.2.1.

Ответ 2

Почему бы не использовать пакеты jquery с PrimeFaces?

<h:outputScript library="primefaces" name="jquery/jquery.js" />

PrimeFaces 2.2.1 имеет jQuery 1.4.4 и 3.0 (в разработке) имеет 1.5.1.

Ответ 3

Многие библиотеки JavaScript используют $ как имя функции или переменной, как это делает jQuery. В случае jQuery $ является просто псевдонимом для jQuery, поэтому все функции доступны без использования $. Ниже приведены некоторые методы:

  • Напишите jQuery.noConflict(); перед инициализацией jQuery, см. ниже

    jQuery.noConflict();
    $(document).ready(function(){
       // your jQuery code   
    });
    
  • Создайте другой псевдоним вместо jQuery для использования в остальной части script.

     var j = jQuery.noConflict();
     // Do something with jQuery
     j("div p").hide();
    
  • Измените все экземпляры $: замените $ на jQuery в блоке кода jQuery

     jQuery(document).ready(function){
           jQuery("div p").hide();
     })
    
  • Полностью переместить jQuery в новое пространство имен в другом объекте.

    var dom = {};
    dom.query = jQuery.noConflict(true);
    // Do something with the new jQuery
    dom.query("div p").hide();
    
  • Задайте область $ для локальной, а не глобальной

        // Method 1
        jQuery(document).ready(function($){
             $("div").hide();
        });
    
    
        // Method 2
        (function($) {
          /* some code that uses $ */ 
        })(jQuery);
    

    Примечание. этот момент имеет один недостаток, у вас не будет доступа к другой библиотеке $().

Original Reference

Ответ 4

Мое решение добавляет этот код на страницу по умолчанию:

<script type="text/javascript">var $j = jQuery.noConflict(true);</script>

После этого я использую jquery с $j.

спасибо

Ответ 5

jQuery имеет режим noConflict ', который позволяет ему играть красиво рядом с другими библиотеками. Я не использовал компоненты Primefaces, поэтому я не знаю точно, но если вы включите jQuery в режиме noconflict, ваши проблемы, скорее всего, исчезнут.

Ответ 6

Мой опыт:

У меня была такая же проблема, и я никогда не работал с обоими jquery libs. (Я использую jQuery вместо $, но никогда не пробовал jQuery.noConflict()).

Мое решение состояло в том, чтобы использовать только lib, связанный с файлами, как описано в ответе Кагатайса.

Ответ 7

чтобы решить конфликт между Primefaces и jQuery, не нужно импортировать какой-либо внешний файл jQuery, поэтому для решения проблемы импортируйте файлы jQuery, расположенные в файле jfp

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
        <h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />

и в вашем коде jQuery замените $на jQuery.