Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2012, 22:21   #1
alex4321
Пользователь
 
Регистрация: 23.07.2012
Сообщений: 77
По умолчанию Вызов функции по к элементам.

В общем, есть функция, принимающая как один аргумент - элемент в котором будет строить необходимый элемент управления, как второй - её параметры.
Таких функций - несколько.
Чтобы можно было вызывать их не только к отдельным объектам, а к массивам объектов и по классам, сделан такой костыль :
Код:
function Control(mode,selector,func,attributes)
{
    objects=Array();
    if (mode == "class") {
        objects = document.getElementsByClassName(selector);
    }
    else if (mode == "id") {
        objects.push(document.getElementById(selector));
    }
    else if (mode == "classes") {
        for (i = 0; i < selector.length; i++) {
            v_class = selector[i];
            add = document.getElemntsByClassName(v_class);
            for (j = 0; j < add.length; j++)
                objects.push(add[i]);
        }
    }
    else if (mode == "ids") {
        for (i = 0; i < selector.length; i++) {
            objects.push(document.getElementById(selector[i]));
        }
    }
    else if (mode == "object") {
        objects.push(selector);
    }
    else if (mode == "objects") {
        for (i = 0; i < selector.length; i++) {
            objects.push(selector[i]);
        }
    }


    for (i = 0; i < objects.length; i++) {
        try {
            func(objects[i], attributes);
        }
        catch (e) {
            alert(e);
        }
    }
}
Т.е. вызов должен выглядеть как-то так :
Код:
		    window.onload = function () {
		        Control("objects", [hSliderDiv1, hSliderDiv2], Slider, {
		            width: 250,
		            min: 0,
		            max: 100,
		            single_step: 1,
		            page_step: 10,
		            value: 0,
		            orientation: "horizontal",
		            change: function (el) { }
		        });
		    }
Но в таком виде оно не работает. При этом такой код вполне работает :
Код:
		    window.onload = function () {
		        Control("objects", [hSliderDiv1], Slider, {
		            width: 250,
		            min: 0,
		            max: 100,
		            single_step: 1,
		            page_step: 10,
		            value: 0,
		            orientation: "horizontal",
		            change: function (el) { }
		        });
		        Control("objects", [hSliderDiv2], Slider, {
		            width: 250,
		            min: 0,
		            max: 100,
		            single_step: 1,
		            page_step: 10,
		            value: 0,
		            orientation: "horizontal",
		            change: function (el) { }
		        });
		    }
При этом функция Slider корректно запускается и завершается.
В чём может быть проблема?


---------------------------------------------------------------
UPD. Картина слегка прояснилась. Что-то извне меняло i.
Вот полный код : http://pastebin.com/5AGY1bsR

Последний раз редактировалось alex4321; 03.09.2012 в 23:43.
alex4321 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов функции -Anton- Microsoft Office Excel 2 09.06.2011 14:18
к элементам первой половины массива добавить минимум, а к элементам второй - добавить максимум specialist Паскаль, Turbo Pascal, PascalABC.NET 3 08.05.2011 01:46
Вызов функции Anubys Помощь студентам 2 06.04.2011 16:40
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Вызов функции new player БД в Delphi 5 07.10.2010 13:01