Javascript конвертировать строку для вызова в качестве функции

0

У меня есть следующий сценарий, когда мне нужно вызвать функцию, основанную на атрибутах данных элемента html.

function func1(arg1){
    alert("func1");
}

function func2(arg2){
    alert("func2");
}

jQuery(document).on('click', '.func-class', function(){
  var funcName = jQuery(this).data('func-name');
  var funcArg = jQuery(this).data('func-arg');      
  //Need to call funcName(funcArg) here
});

HTML:

<div data-func-name="func1" data-func-arg="arg1" class="func-class">Func1</div>
<div data-func-name="func2" data-func-arg="arg2" class="func-class">Func2</div>

JSFiddle того же: http://jsfiddle.net/E4HeT/

Теги:

3 ответа

4
Лучший ответ

Если эти функции определены в глобальной области действия, вы можете сделать это:

window[funcName](funcArg);

В противном случае я бы предложил помещать их в объект:

var functions = {
    "func1":func1,
    "func2":func2
};
functions[funcName](funcArg);

Этот второй на самом деле безопаснее, поскольку он помогает предотвратить выполнение произвольного кода.

0
$('.func-class').click(function(){

    var toCallArg = $(this).data('func-arg');        
    var toCall = function(toCallArg){            
        //your code
    };
    toCall(toCallArg);
});    
0

вы можете сделать примерно следующее это

window[funcName](funcArg)

но вам нужно будет получить ссылку на функцию, установив ее в объекте (например, то, что я сделал в объекте window), потому что он является частным в функции jQuery.ready

Ещё вопросы

Сообщество Overcoder
Наверх
Меню