views:

41

answers:

4

Hey all,

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?

Thanks, Matt

+1  A: 

Just use fn();

wsanville
+4  A: 

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');");
Jonathon
A: 

Why are you using eval? Why not simply:-

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

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

johnmdonahue