0

这是在加载时运行的全局函数:

$.fn.loadfns = function(specificfns) {
    $('#wrapper').hide();
    $('#load').fadeIn(400);
    $(window).load( function() {
        $('#load').fadeOut(400, function() {
            $('#wrapper').fadeIn(600, function() {
                specificfns;
            })
        })
    });
};

问题是,有些页面需要在加载后运行额外的功能(比如将事件插入 glDatePicker),所以我试图将它们作为 loadfns 的参数传递,比如

$.fn.loadfns("alert('I won't be run');");

但是什么也没发生,它没有被执行。如果我做

... rest of function ...
$('#wrapper').fadeIn(600, function() {
    alert(specificfns);
})

它提醒“警报('我不会被跑');” (不带括号)应该作为一个函数工作。

4

1 回答 1

3

要传递一个函数,你传递一个函数,而不是一个字符串。

如果您只想允许一个额外的功能(当然可以调用其他功能):

$.fn.loadfns = function(extraFunction) {
$('#wrapper').hide();
$('#load').fadeIn(400);
$(window).load( function() {
  $('#load').fadeOut(400, function() {
    $('#wrapper').fadeIn(600, function() {
        if (extraFunction) {
            extraFunction();
        }
    })
  })
});
};

像这样使用:

$("....").loadfns(function() {
     alert("Do something");
});

如果你想允许多个额外的功能,传入一个数组:

$.fn.loadfns = function(extraFunctions) {
$('#wrapper').hide();
$('#load').fadeIn(400);
$(window).load( function() {
  $('#load').fadeOut(400, function() {
    $('#wrapper').fadeIn(600, function() {
        var index;

        if (extraFunctions) {
            for (index = 0; index < extraFunctions.length; ++index) {
                extraFunctions[index]();
            }
        }
    })
  })
});
};

(当然,如果您在启用 ES5 的环境中或使用 shim,forEach则可以使用而不是for循环。)

像这样使用:

$("....").loadfns([doSomething, doSomethingElse]);

function doSomething() { /* ... */ }
function doSomethingElse() { /* ... */ }
// They don't have to be named, it's just clearer this way than with inline ones

try/catch如果您想处理来自函数的异常,您可以考虑在函数调用周围放置块。

于 2012-12-14T08:58:41.983 回答