Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вызов функции по названию переменной (https://javascript.ru/forum/misc/15301-vyzov-funkcii-po-nazvaniyu-peremennojj.html)

ntro123 21.02.2011 12:14

вызов функции по названию переменной
 
Добрый день.

Вопрос следуший.

var id_name_func='0';

my_func+id_name_func+(text);

my_func0(text)
{
 alert(text);
}


Не могу вызвать ф-цию my_func0(), напрямую тоже не могу т.к. цифра (т.е. id) в конце функции может быть разным.

Т.е. через переменную нужно дополнить название функции и вызвать её. Но как незнаю, пробывал по всякому.

Заранее спасибо.

walik 21.02.2011 12:23

<html>
<head>
<script>
var id_name_func= '0';
function my_func0(text)
{
 alert(text);
}
</script>
</head>
<body>
<input type="button" value="Call" onclick="*!*window['my_func'+id_name_func]('text');*/!*" />
</body>
</html>

ntro123 21.02.2011 13:32

а есть еще какиенебудь методы?

Aetae 21.02.2011 14:24

>а есть еще какиенебудь методы?
Сделать массивом, а не заниматься бредом.

ntro123 21.02.2011 14:44

Вложений: 1
почему бредом то сразу?
просто написал оболочку для окон для своего проекта.
т.е. из чтобы было достаточно написать
<div id="swim_window0"><b>Сюда прокси:</b><textarea id="prxlsist"></textarea></div>


и запихнуть только нужные импуты туда, а все остальное типа кнопки сабмит, присвоения классов и т.д. он засунет в этот див сам.
и получится вот это:
http://javascript.ru/forum/attachmen...1&d=1298288297

Но тут еще 1 дело, он отправляет запросы на сервер, без асинхронности чтобы можно было в несколько потоков. И для каждого окна со своим id будет своя функция.

т.е. при клике на кнопку GO (не важно какой формы) срабатывало событие $('*[id^=go_stop]').click(function(){
//тут разный код дефолтный для всех окон
и потом через регулярные выражения выташить id и вызвать функцию с нужным id

return my_func+id();
});

Я не представляю как это сделать через массив, т.к. хочется тупо объявлять в отдельном файле название функций типа
function my_func0()
{
alert('privet');
}
и больше не очем не думать. а если через массив то мне придется присваивать этому массиву саму функцию, что не есть хорошо для меня.

Или я не прав?

Aetae 21.02.2011 14:51

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

ntro123 21.02.2011 14:54

Aetae,
вы имеете ввиду проверять какая кнопка вызвала функцию?
т.е.

if(this.id.match(/[0-9].{0,}$/i)=='0')
{
return my_func0();
}else if(this.id.match(/[0-9].{0,}$/i)==1')
{
return my_func1();
}
и т.д.

да это можно, но если таких будет 100?

ntro123 21.02.2011 15:07

все спасибо нашел http://javascript.ru/accessors

ntro123 21.02.2011 15:10

window['go_stop_swim'+this.id.match(/[0-9].{0,}$/i)]();


Часовой пояс GMT +3, время: 10:02.