Как я могу сделать значение из переменной имя функции? - PullRequest
1 голос
/ 24 марта 2011

Я создал программу упражнений, которая создает динамическое меню из JSON. и затем, каждый раз, когда я щелкаю по этому динамическому меню, появляется вкладка с именем вкладки, в зависимости от того, какое имя вкладки вы нажимаете.

что я хочу сейчас, что я до сих пор выясняю, так это то, что каждый раз, когда я щелкаю по меню, оно будет вызывать функцию с тем же именем, по которому я щелкал. Но я просто не знаю, как это сделать. , мои функции js - это отдельный файл. вот код:

    ....
    $('.menu').click(function () {
       dyna_tabs.add('Tab' + $(this).attr("rel"),  //this is for the <a href= "-">
       $(this).attr("rel"),                         //this if for the title
       $(this).html());                             // for the tab_content
       fname = $(this).html();                     // this is my variable name which i plan to use as function name
       alert('this would be my function name ' + fname);
       fname();
    }); 
    ....

Вы можете найти остальную часть кода динамической вкладки здесь . я просто сделал некоторые изменения, которые бы создали меню, а затем вкладку из меню.

итак ... я набираю fname();, где fname содержит значение предположительно моего имени функции. но каждый раз, когда я запускаю свою программу, появляется сообщение об ошибке «fname не является функцией». может кто-нибудь здесь знает, как это сделать правильно? пожалуйста ....

и еще одна вещь, кто-нибудь знает, как поместить некоторые html-коды в мою динамическую вкладку? или .html-страница внутри него? спасибо за чтение

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

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

loader(fname);

function loader(s) {
  switch(s) {
    case 'xy': xy(); break;
    ...
  }
}

Другой вариант - сохранить ваши функции в объекте:

var myFunctions={
  'xy' : function () {
    //do something here
  },
  ...
};

и тогда вы можете легко их назвать, как:

myFunctions[fname];

Это не полные решения, а лишь некоторые рекомендации, которым вы могли бы следовать. Преимущество перед eval заключается в том, что с этими решениями не может получиться, что функция, которую вы не собирались запускать, могла бы работать. Можно вызывать только предопределенные.

1 голос
/ 24 марта 2011

Я заранее извинюсь за это.

eval(fname + '()');

должно работать

По этому вопросу ( Как выполнить функцию JavaScript, когда у меня есть имя в виде строки) Есть несколько лучших альтернатив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...