Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите оптимизировать код 
:(
    Опции темы
Ctulhy
Дата 20.12.2014, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 2.8.2008
Где: Россия, Курск

Репутация: нет
Всего: 2



Здравствуйте! 
Заранее извиняюсь за глупый нубский вопрос.
Подскажите пожалуйста как оптимизировать код?
Код

$(document).ready(function(){
            FuncHide1();
        });
        function FuncShow1(){
            $("#Func1").show();
        }
        function FuncHide1(){
            $("#Func1").hide();
        }
        $(document).ready(function(){
            FuncHide2();
        });
        function FuncShow2(){
            $("#Func2").show();
        }
        function FuncHide2(){
            $("#Func2").hide();
        }

Будет #Func1, #Func2, #Func3, #Func4, ... Как сделать так чтобы не прописывать каждый раз новую функцию со сходным содержанием? 
Ну и да, как вы поняли функция вызывается по клику на ссылку <a href="javascript:FuncShow1()">Вызов 1</a> <a href="javascript:FuncShow2()">Вызов 2</a>
--------------------
скучно в Москве и дождливо в Крыму.
PM MAIL ICQ Skype   Вверх
Ctulhy
Дата 20.12.2014, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 2.8.2008
Где: Россия, Курск

Репутация: нет
Всего: 2



up!
--------------------
скучно в Москве и дождливо в Крыму.
PM MAIL ICQ Skype   Вверх
ТоляМБА
Дата 21.12.2014, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



А можно создать всего две функции FuncShow и FuncHide, а #Func1, #Func2, #Func3, #Func4, ... передавать им как параметр?
PM   Вверх
Aliance
Дата 22.12.2014, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Код

$(document).ready(function(){
    FuncHide1();
});
// ...
$(document).ready(function(){
    FuncHide2();
});
// МОЖНО И НУЖНО ПИСАТЬ ТАК:
$(function(){
    FuncHide1();
    FuncHide2();
});


Плюс в качестве оптимизации лучше выносить в кешируемую глобальную переменную все вызовы jquery sizzle selectors, например так:
Код

// создаем глобальную переменную
var $block;

$(function(){
    // по DOM ready записываем в нее ОДИН РАЗ ссылку на HTML ноду
    $block = $('#myHTMLBlock');
});

function myFynction() {
    // дальше где угодно обращаемся к глобальной переменной
    // таким образом она каждый раз не вычисляется
    $block.toggle();
}


Цитата(ТоляМБА @  21.12.2014,  02:18 Найти цитируемый пост)
А можно создать всего две функции FuncShow и FuncHide, а #Func1, #Func2, #Func3, #Func4, ... передавать им как параметр? 

А какой в этом смысл, если исходная функция будет просто проксировать jQuery метод? Не проще ли сразу вызывать его?
PM MAIL WWW ICQ Skype   Вверх
Ceiceron
Дата 23.12.2014, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 2.8.2007
Где: Дубна

Репутация: нет
Всего: нет



Оптимизируем с точки зрения компактности и повторного использования кода:
Вариант 1:

Код

function ShowHide(id,state)
{
    if(state)
    {
        $("#Func"+id).show();
    }
    else
    {
        $("#Func"+id).hide();
    }
}

$(document).ready(function(){
    $("a[id^='Func']").hide();
});



Вариант 2:

Код

$(document).ready(function(){
    $("a[id^='Func']").click(function(){
        var id=this.id.substring(1,this.id.length);
        $("#Func"+id).toggle();
    });
});


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Ctulhy
Дата 26.12.2014, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 2.8.2008
Где: Россия, Курск

Репутация: нет
Всего: 2



Большое спасибо за ответ, но либо я что-то не правильно делаю, либо в коде ошибка - не работает не один из вариантов:( 

Это сообщение отредактировал(а) Ctulhy - 26.12.2014, 04:10
--------------------
скучно в Москве и дождливо в Крыму.
PM MAIL ICQ Skype   Вверх
Ceiceron
Дата 27.12.2014, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 2.8.2007
Где: Дубна

Репутация: нет
Всего: нет



А как вы используете приведенный для примера код?

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Ctulhy
Дата 4.1.2015, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 2.8.2008
Где: Россия, Курск

Репутация: нет
Всего: 2



Цитата(Ceiceron @ 27.12.2014,  19:57)
А как вы используете приведенный для примера код?

Этот ответ добавлен с нового Винграда - http://vingrad.com

Код

function ShowHide(id,state)
        {
            if(state)
            {
                $("#popup"+id).show();
            }
            else
            {
                $("#popup"+id).hide();
            }
        }

        $(document).ready(function(){
            $("a[id^='ShowHide']").hide();
        });



Код

<div id="popup2">
            <a href="javascript:ShowHide2()" class="close"></a>
            <div class="text">
                попап 2
            </div>
</div>



--------------------
скучно в Москве и дождливо в Крыму.
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 4.1.2015, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Ctulhy, несколько вопросов:
1. Почему в 14-ой строке a[id^='ShowHide'], вместо a[id^='popup'] ?
2. Для чего нужны эти выкрутасы с шоу-хайд, когда есть toggle?
3. Каким образом ты собираешься клацать по ссылке, если она у тебя находится внутри блока, который будет скрываться. Когда блок скрыт, она будет недоступна и раскрыть блок с ее помощью не получится.
4. Для чего вообще нужны все эти пляски с бубнами, когда существует туева хуча готовых попапов с подробной документацией по использованию, в том числе и для жквери?



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Ceiceron
Дата 5.1.2015, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 2.8.2007
Где: Дубна

Репутация: нет
Всего: нет



Человек ищет готовое решение, которое скопипастил и полетело без вникания в то как это работает и без обращения к документации по jquery, где в примерах все и так есть. Так что ваши претензии бесцельны. С другой стороны иногда нужно пройтись по азам, что бы научиться пользоваться уже готовыми решениями ;)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1019 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.