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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функции по ссылке, Вызов функции из другой функции 
:(
    Опции темы
mus
Дата 3.8.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Господа, требуется вызвать функцию внутри другой функции.
Тоесть у меня есть функция function a();, следует передать в функцию a() некий аргумент с названием функции, которую следует запустить внутри функции a();, например функцию b(); или с(arg1, arg2...), или функции d(массив аргументов), и, как Вы наверное догадались, нужно учесть, что функция должна вызываться с тем набором аргументов, который я предусмотрел передавая значения фукнции a();

например:
Код
function a(func_name, args) {
            call_func(func_name, args);
}
function b(str) {
            alert(str);
}
a(b, "blablabla");


Как сие реализовать? Возможно ли средствами JavaScript?
Заранее благодарю!
PM MAIL   Вверх
skyboy
Дата 3.8.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



к примеру, можно использовать функцию eval, которая интерпретирует переданную строку. Кроме того, можно так:
Код

function a(func_name, args)
{
 func_name(args);
}
function b(str)
{
 alert(str);
}

вызывается кнопкой:
Код

<button onclick='a(b, "blablabla");'>+</button>

Выдаёт "blablabla"
PM MAIL   Вверх
mus
Дата 3.8.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



=) Да, в js я откровенно говоря ЛАМЕР, но не до такой степени...

Короче, есть функция результирования ответов от Ajax о проделанной работе, если функция, скажем, добавления продукции или удаления пользователей вернула положительный результат, на экран вываливается сообщение "всё гуд пиплы, радуйтесь", в противном случае "аффтар, выпей йаду", далее функция, по идее, выполняет перезагрузку определенного селектора (так всегда, такова логика сего приложения) с помощью спецовской функции, но она вот всегда разная (почти всегда, там их 3 разновидности), так вот, на реальном примере...

Код

function operationResult(res) {
        var err = document.getElementById('error');
        if(!res) {
                err.className = "error_ERR";
                err.innerHTML = "Операция завершилась неудачно "+getOperDate();
        }
        else {
                err.className = "error_OK";
                err.innerHTML = "Операция выполнена успешно "+getOperDate();
        }
        RefreshSelectProduction();
        ViewCountryList();
        defaultError(5);
}
 

res - это результат, возвращаемый Ajax функцией, которая выполнила либо добавление продукции либо удаление пользователя (операций много больше, взял два пример наобум), так вот, в случае, когда используется операция добавления продукции, срабатывается функция RefreshSelectProduction(), когда удаление пользователей RefreshSelectUser() (их внутреннее устройство разниться, но смысл остается прежним), так вот, было бы удобно, чтобы все работало как-то так

Код

function operationResult(res, func_name, args) {
        var err = document.getElementById('error');
        if(!res) {
                err.className = "error_ERR";
                err.innerHTML = "Операция завершилась неудачно "+getOperDate();
        }
        else {
                err.className = "error_OK";
                err.innerHTML = "Операция выполнена успешно "+getOperDate();
        }
        Call_func(func_name, args); // args на всякий случай
        ViewCountryList();
        defaultError(5);
}
operationResult(true, RefreshSelect, new Array());
 

ВОТ, типа call_user_func в php...
PM MAIL   Вверх
Sardar
Дата 3.8.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



mus, кончай думать на сях, это JS smile
В JS все функции высшего порядка, т.е. способны принимать другие функции аргументами и возвращать функции. Посмотри ещё на Function.call и Function.apply методы для выполнения функции на произвольном обьекте и передаче аргументов.

В твоём примере вызываешь func_name() (да так, в переменной func_name лежит значение-функция, не имя, а значение тип: функция). Либо func_name.apply(this, args), за место this любой обьект на который this внутри func_name ссылаться будет.

Вызываться это может так operationResult(res, function() {alert("OK")});


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
mus
Дата 3.8.2006, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Sardar @  3.8.2006,  23:34 Найти цитируемый пост)
Сообщение скрыто модератором

Ну неужели я тут такую чушь написал, что меня матом обложили? =)

-----------------------------------------------

Ой, skyboy, извини, я тут твое сообщение прочел и не сразу вкурил суть...
В принципе про eval я знал, а вот по клику не подходит, можно ли без клика обойтись?

Это сообщение отредактировал(а) mus - 3.8.2006, 23:43
PM MAIL   Вверх
Sardar
Дата 3.8.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Не совсем, просто дал быстрый ответ, а вижу тут нужен был чуть расширенный, прикрыл пока редактирую smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
mus
Дата 3.8.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Sardar, 
Ох ё...
Начинаю влюбляться в JS... =))
Спасибо! =))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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