Выполнение функции, переданной в качестве аргумента в Javascript? - PullRequest
4 голосов
/ 12 февраля 2010

Я пытаюсь написать универсальную функцию, которая будет блокировать пользовательский интерфейс во время вызова AJAX. Я пытаюсь сделать так, чтобы функция A запускала любую другую функцию, переданную в качестве аргумента. Это то, что у меня так далеко:

function blockWhileLoading(fn, msg)
{
  if (msg == null)
  {
    msg = 'Please wait while the next page is loaded...';
  }

  $.blockUI(
  {
    message: '<h1>' + msg + '</h1>',
    css:
    { 
      border: 'none', 
      padding: '15px', 
      backgroundColor: '#E3D9BA', 
      '-webkit-border-radius': '10px', 
      '-moz-border-radius': '10px', 
      color: '#4D2612'
    }
  }); 
  $('body').scrollLeft(0);

  setTimeout(function()
  {
    eval(fn);
    $.unblockUI();
  }, 1000);
}

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

Ответы [ 4 ]

5 голосов
/ 12 февраля 2010

Нет, eval используется для превращения фрагмента "string" в код JavaScript во время выполнения. Просто позвоните fn(). Это ссылка на функцию.

Вот что делает eval:

var myalert = "alert('test');";
eval(myalert);

Эквивалентно:

eval("alert('test');");
4 голосов
/ 12 февраля 2010

Просто используйте fn();

0 голосов
/ 12 февраля 2010

Если fn передается как объект, а не как строка, вызов fn() должен работать.

0 голосов
/ 12 февраля 2010

Почему бы просто не использовать:

fn();

Вместо eval.

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