2015-11-17 2 views
1

Я хочу ввести функцию JavaScript в DOM и позвонить ей позже.Вставьте функцию JavaScript (как строку) в Html и назовите ее

Нечто подобное

var funcCode = 'function test() { alert("test"); }'; 

function callFunc(functionName){ 
    functionName(); 
} 

callFunc('test'); 

Как я могу это сделать?

Update

контекстная проблема

У меня есть действия и function в базе данных. Functions основаны на действиях. Я извлекаю оба действия и functions и показываю действия на UI, но мне нужно ввести функцию JS для каждого показанного действия. Если действие отклонено, то функция должна быть.

DOM функции необходимы

var name1 = function() { 

    return { 
     run : function() { 
      // code for action 1     
     } 
    } 
} 

var name2 = function() { 

    return { 
     run : function() { 
      // code for action 2     
     } 
    } 
} 
... 

менеджер для действий (и хотят что-то вроде этого)

Manager.Use(funcName) => to call run 
+1

в вашем 'callFunc' Eval (funcCode)() – webduvet

+1

могли бы вы предоставить некоторый контекст, почему вам нужно, чтобы ввести функцию в DOM? –

+0

Я обновил проблему, чтобы быть более четкой. Спасибо! –

ответ

2

Если вы необходимости вводить функцию в виде строки в DOM, а затем выполнить это, вы возможно что-то не так.

Это означает, что вы можете это сделать. Я не могу сделать скрипку, потому что они (по правде) не позволяют вводить теги script в HTML.

var funcCode = 'function test() { alert("test"); }'; 
$('body').append('<script type="text/javascript">'+funcCode+'</script>'); 

function callFunc(functionName){ 
    eval(functionName)(); 
} 

callFunc('test'); 

Примечание - приведенный выше код будет делать то, что вы просите, но я прошу вас пересмотреть свой Deisgn, и посмотреть на почему вы пытаетесь сделать это. Это возможно не правильно.

+0

Я обновил проблему, чтобы быть более четкой. Спасибо! –

0
var dynamicCode = "var name1 = function() {return {run: function() {alert('1')}}}; var name2 = function() {return {run: function() {alert(2)}}};"; 

eval(dynamicCode); 

function use (funcName) { 
    eval(funcName + "()['run']()"); 
} 

use("name2"); 
+0

Я обновил проблему, чтобы быть более четкой. Спасибо! –

Смежные вопросы