这是在加载时运行的全局函数:
$.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);
})
警告“警告('我不会跑');” (没有括号)应该作为一种功能。
答案 0 :(得分: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的环境或使用垫片,则可以使用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
块。