Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Вопрос к знатокам jQuery


Автор: Psytodelist 13.6.2011, 02:25
Здравствуйте! Так как у меня джейквери юзается вместе с прототайпом,
мне посоветовали для работоспособности код оборачивать в

Код

(function($) {

})(jQuery);


Только вот функции, которые создаются внутри этой обертки не работают,
поэтому приходится вне этой обертки писать эти функции, но уже без $, а с jQuery.
Подскажите, как избежать написание jQuery вместо $.

Пример неработающей функции:

Код

(function($) {

function del_photo(blockid) {
        $(".block_" + blockid).parent().effect('fade');
    }

})(jQuery);


Пример работающей функции:

Код

function del_photo(blockid) {
        jQuery(".block_" + blockid).parent().effect('fade');
    }


 smile  smile 

Автор: нуп 13.6.2011, 10:18
Вначале пропишите 
Код

jQuery.noConflict();

Автор: Amphiluke 13.6.2011, 10:20
Выводите в глобальную область видимости как можно меньше функций. В идеале должна быть только одна анонимная функция вида
Код

(function($) {

    // здесь все функции. Они не будут доступны из глобальной области видимости

})(jQuery);

Скажите, какая у вас надобность в «глобальных» функциях и почему нельзя код, вызывающий эти функции, также включить в обертку общей анонимной функции? Например,
Код

(function($) {

    function del_photo(blockid) {
        $(".block_" + blockid).parent().effect('fade');
    }

    $(".photo").click(function() { del_photo($(this).attr("id")); });

})(jQuery);

И всё работает, мне не нужен доступ к ф-ции del_photo извне.

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

Автор: Psytodelist 13.6.2011, 22:41
Куча воды и никто ничего по существу не написал.
jQuery.noConflict(); мне не нужен, мне не нужен никакой
знак кроме $, к которому я уже привык.

Цитата

И всё работает, мне не нужен доступ к ф-ции del_photo извне.

Причём тут нужен Вам или не нужен Вам доступ извне? Речь сейчас идет о том, что нужно мне.

Автор: нуп 13.6.2011, 22:45
Уууу. Вам нужно, вы и делайте  smile 

Автор: Psytodelist 13.6.2011, 22:51
просто коллбек аякса выдает уникальные данные и вставляет это в шаблон, который вставляется в боди.див. в этом шаблоне есть селекты. Стоят ончейнджы на селектах и соотвественно вызывается функция с параметром, полученным из аякса. Вот потому и надо.

Автор: blah 13.6.2011, 23:24
Цитата(Psytodelist @  13.6.2011,  01:25 Найти цитируемый пост)
Подскажите, как избежать написание jQuery вместо $.


Никак. 

Цитата(Psytodelist @  13.6.2011,  21:41 Найти цитируемый пост)
Куча воды и никто ничего по существу не написал.
jQuery.noConflict(); мне не нужен, мне не нужен никакой
знак кроме $, к которому я уже привык.

Переопределить псевдоним на 
Код

mneNeNujenNikakoyZnakKrome$ = jQuery.noConflict();

раз привыкли.

Автор: Psytodelist 14.6.2011, 00:33
spaSiBoZaVniMaNiE

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)