4

I'm trying to write a generic function that will block out the UI while an AJAX call is made. What I'm trying to do is have a function A run any other function passed in as an argument. This is what I've got so far:

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);
}

Now when it comes time to eval the function, nothing seems to happen. Is eval not the correct way to force a function to run?

4 Answers 4

5

No, eval is used to turn a chunk of "string" into JavaScript code at runtime. Simply call fn(). It's a function reference.

This is what eval does:

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

Equivalent to:

eval("alert('test');");
Sign up to request clarification or add additional context in comments.

Comments

4

Just use fn();

Comments

0

If fn is being passed as an object and not a string, calling fn() should work.

Comments

0

Why not simply use:

fn();

Instead of eval.

3 Comments

Because I'm new to Javascript and don't know any better. Hence the question.
@Sonny: Sorry, the javascript looked a little advanced for someone new to javascript.
No worries... I'm actually inheriting a lot of this from someone else. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.