2009-07-21 4 views
2

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

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

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

+0

http://stackoverflow.com/questions/1049112/what-is-the-in-jquery/1050433#1050433 – SilentGhost

+0

@SilentGhost, спасибо. Я искал аналогичный вопрос, чтобы не повторять одно и то же, но ничего не мог найти. – dalizard

ответ

2
.

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

var $jq = jQuery.noConflict(); 

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

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

;(function($) { 
    ... 
})(jQuery); 
+0

Возможны следующие варианты (часто используемые) для разработки плагинов. Поэтому рекомендуемыми параметрами являются использование .noConflict() или просто «jQuery». Я просто пытаюсь угадать наилучшую практику :-) – dalizard

+0

Я бы сказал, что для коротких бит кода, включенных непосредственно на страницу, я бы использовал режим noConflict. Не нужно набирать jQuery слишком много раз, прежде чем вы оцениваете короткое замыкание - вот почему в первую очередь стоит $.Для более длительного, автономного кода, такого как плагин, лучше и проще использовать синтаксис функции, так как вы можете использовать короткое замыкание. И вам всегда нужно знать, что могут быть конфликты. – tvanfosson

+0

Благодарим за помощь! – dalizard

6

Да, если вы используете другую библиотеку, которая использует $, вы можете использовать полную форму jQuery или настроить jQuery в no-conflict mode. Например:

<script> 
    jQuery.noConflict(); 

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

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

Другой способ извлечь выгоду из короткого имени в то время как предотвращение конфликтов с другими библиотеками будет делать Somthing так:

<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

1

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

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

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

1

Вы можете обернуть вам JQuery часть кода в функцию, как это:

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

// use $ here to access other JS library 

и вы будете в состоянии использовать $ внутри функции (это прямоприменяемых функцию, которая сопоставляет $ в JQuery

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

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

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