jQuery и другие библиотеки, а также использование '$' - PullRequest
2 голосов
/ 21 июля 2009

У меня быстрый вопрос типа начинающих. Если бы я использовал jQuery и некоторые другие фреймворки, было бы проблематично следующее утверждение:

jQuery(document).ready(function () {
    $("input[name='password']").focus(function () {
        $("input[value='login']").attr("checked", "checked");
    });
});

То есть использование $ в функции .ready (). Следует ли заменить $ на jQuery, чтобы избежать конфликтов?

Ответы [ 6 ]

6 голосов
/ 21 июля 2009

Да, если вы используете другую библиотеку, в которой используется $, вы можете использовать полную форму jQuery или настроить jQuery в режиме без конфликтов . E.g.:

<script>
     jQuery.noConflict();

     // Use jQuery via jQuery(...)
     jQuery(document).ready(function(){
       jQuery("div").hide();
     });

     // Use Prototype with $(...), etc.
     $('someid').hide();
   </script>

Еще один способ получить короткое имя и предотвратить конфликты с другими библиотеками - это сделать что-то вроде этого:

<script>
     var $j = jQuery.noConflict();

     // Use jQuery via $j(...)
     $j(document).ready(function(){
       $j("div").hide();
     });

     // Use Prototype with $(...), etc.
     $('someid').hide();
</script>

Я бы предложил прочитать это:

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

2 голосов
/ 21 июля 2009

При использовании нескольких библиотек, использующих $, обычной практикой является использование режима noConflict и переназначение $ для jQuery на что-то другое.

var $jq = jQuery.noConflict();

$jq( function() {
    $jq("input[name='password']").focus( function() {
        $jq("input[value='login']").attr("checked","checked");
    });
});

В разработке плагинов, общий способ справиться с этим - передать `$ 'в качестве параметра функции, определяющей определение вашего плагина и применяющей функцию к объекту jQuery.

;(function($) {
    ...
})(jQuery);
1 голос
/ 21 июля 2009
jQuery(document).ready(function ($) {
    $("input[name='password']").focus(function () {
        $("input[value='login']").attr("checked", "checked");
    });
});

Callback для ready () получает jQuery в качестве аргумента: вы можете вызвать этот аргумент $. Это переопределит другие определения $ в области обратного вызова.

1 голос
/ 21 июля 2009

Вы можете заключить свою часть кода jQuery в функцию следующим образом:

function($) {
    // jQuery code here
}(jQuery);

// use $ here to access other JS library

, и вы сможете использовать $ внутри функции (это автоматически выполняемая функция, которая отображает $ в jQuery.

1 голос
/ 21 июля 2009

Конечно, сделайте ваш код как можно более явным, особенно в этом случае. Если сайт изменится позже, вы можете позвонить не той библиотеке.

1 голос
/ 21 июля 2009

То, что вы показали, верно, за исключением того, что вы хотите заменить все экземпляры '$' Затем вы переопределите функцию '$'.

jQuery(document).ready(function () {
    jQuery("input[name='password']").focus(function () {
        jQuery("input[value='login']").attr("checked", "checked");
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...