javascript 回调函数
来源:互联网 发布:ie浏览器不能上淘宝网 编辑:程序博客网 时间:2024/05/16 19:24
有一系列javascript方法需要调用,并且可能对于每个方法都有自己的回调函数,要求顺序执行各函数和自己的回调函数,下面这个方法就是基于这个需求产生的,目前还不太完善,但是足以满足大部分需求了。使用方法:传入Array数组的option参数fun(要调用的函数名),callback(回调函数方法体),timeout(如果没有回调方法可设置延时执行序列中下个方法)。
var CallBackEventHandle = function() {
var options;
if (arguments.length == 0) {
return;
}
options = arguments[0];
if (options.constructor == Array) {
options = options.reverse();
var deep = 1;
var RecursiveFun = function() {
var options;
var funStr = "";
if (arguments.length == 0) {
return;
}
options = arguments[0];
var optionObj = options.pop();
if (optionObj != undefined) {
var fun, callback, timeout;
if ("fun" in optionObj) {
fun = optionObj.fun;
}
if ("callback" in optionObj) {
callback = optionObj.callback;
}
if ("timeout" in optionObj) {
timeout = optionObj.timeout;
}
var symbol = "";
var num=1;
for (var i = 1; i < deep; i++) {
num = num*2;
}
for(var i=1 ;i<num;i++) {
symbol += "\\";
}
symbol += "\"";
deep++;
if (typeof (fun) == "string") {
if (typeof (callback) == "string") {
funStr += fun + "(";
funStr += "{ finishCallBack: " + symbol + callback + RecursiveFun(options) + symbol + " }";
funStr += ");";
}
else if (typeof (callback) == "undefined") {
funStr += fun + "(";
funStr += "{ finishCallBack: " + symbol + RecursiveFun(options, timeout) + symbol + " }";
funStr += ");";
}
if (arguments[1] != undefined && !isNaN(arguments[1])) {
funStr = "var next" + fun + "=function(){setTimeout(function(){" + funStr + "}," + parseInt(arguments[1]) + ")};";
funStr += "next" + fun + "();";
}
}
// var evalfun;
// eval("evalfun=" + fun);
// evalfun(option);
return funStr
}
else {
return "";
}
};
var funstr = RecursiveFun(options);
if (funstr != "")
eval(funstr);
}
};
function fun1(option)
{
alert("fun1");
if(option && "finishCallBack" in option)
{
var finishcall = option.finishCallBack;
if(typeof(finishcall) == "string")
{
eval(finishcall);
}
else
{
finishcall();
}
}
}
function fun2(option)
{
alert("fun2");
if(option && "finishCallBack" in option)
{
var finishcall = option.finishCallBack;
if(typeof(finishcall) == "string")
{
eval(finishcall);
}
else
{
finishcall();
}
}
}
function fun3(option)
{
alert("fun3");
if(option && "finishCallBack" in option)
{
var finishcall = option.finishCallBack;
if(typeof(finishcall) == "string")
{
eval(finishcall);
}
else
{
finishcall();
}
}
}
//依次调用fun1,fun1的callback,fun2,fun2的callback,fun3,fun3的callback
CallBackEventHandle(new Array({fun:"fun1",callback:"alert('a');"},{fun:"fun2",callback:"alert('b');"},{fun:"fun3",callback:"alert('c');"}));
//依次调用fun1,fun1的callback,fun2,(这里没有传入callbak参数,而是设置了timeout,将延迟5秒执行fun3),fun3,fun3的callback
CallBackEventHandle(new Array({fun:"fun1",callback:"alert('a');"},{fun:"fun2",timeout:"5000"},{fun:"fun3",callback:"alert('c');"}));
function w(s)
{
document.write(s);
}
var CallBackEventHandle = function() {
var options;
if (arguments.length == 0) {
return;
}
options = arguments[0];
if (options.constructor == Array) {
options = options.reverse();
var deep = 1;
var RecursiveFun = function() {
var options;
var funStr = "";
if (arguments.length == 0) {
return;
}
options = arguments[0];
var optionObj = options.pop();
if (optionObj != undefined) {
var fun, callback, timeout;
if ("fun" in optionObj) {
fun = optionObj.fun;
}
if ("callback" in optionObj) {
callback = optionObj.callback;
}
if ("timeout" in optionObj) {
timeout = optionObj.timeout;
}
var symbol = "";
var num=1;
for (var i = 1; i < deep; i++) {
num = num*2;
}
for(var i=1 ;i<num;i++) {
symbol += "\\";
}
symbol += "\"";
deep++;
if (typeof (fun) == "string") {
if (typeof (callback) == "string") {
funStr += fun + "(";
funStr += "{ finishCallBack: " + symbol + callback + RecursiveFun(options) + symbol + " }";
funStr += ");";
}
else if (typeof (callback) == "undefined") {
funStr += fun + "(";
funStr += "{ finishCallBack: " + symbol + RecursiveFun(options, timeout) + symbol + " }";
funStr += ");";
}
if (arguments[1] != undefined && !isNaN(arguments[1])) {
funStr = "var next" + fun + "=function(){setTimeout(function(){" + funStr + "}," + parseInt(arguments[1]) + ")};";
funStr += "next" + fun + "();";
}
}
// var evalfun;
// eval("evalfun=" + fun);
// evalfun(option);
return funStr
}
else {
return "";
}
};
var funstr = RecursiveFun(options);
if (funstr != "")
eval(funstr);
}
};
function fun1(option)
{
alert("fun1");
if(option && "finishCallBack" in option)
{
var finishcall = option.finishCallBack;
if(typeof(finishcall) == "string")
{
eval(finishcall);
}
else
{
finishcall();
}
}
}
function fun2(option)
{
alert("fun2");
if(option && "finishCallBack" in option)
{
var finishcall = option.finishCallBack;
if(typeof(finishcall) == "string")
{
eval(finishcall);
}
else
{
finishcall();
}
}
}
function fun3(option)
{
alert("fun3");
if(option && "finishCallBack" in option)
{
var finishcall = option.finishCallBack;
if(typeof(finishcall) == "string")
{
eval(finishcall);
}
else
{
finishcall();
}
}
}
//依次调用fun1,fun1的callback,fun2,fun2的callback,fun3,fun3的callback
CallBackEventHandle(new Array({fun:"fun1",callback:"alert('a');"},{fun:"fun2",callback:"alert('b');"},{fun:"fun3",callback:"alert('c');"}));
//依次调用fun1,fun1的callback,fun2,(这里没有传入callbak参数,而是设置了timeout,将延迟5秒执行fun3),fun3,fun3的callback
CallBackEventHandle(new Array({fun:"fun1",callback:"alert('a');"},{fun:"fun2",timeout:"5000"},{fun:"fun3",callback:"alert('c');"}));
function w(s)
{
document.write(s);
}
- javascript回调函数
- javascript 回调函数
- javascript 回调函数
- javascript回调函数
- javascript 回调函数
- Javascript 回调函数
- javascript回调函数
- javascript回调函数
- JavaScript回调函数
- javascript 回调函数
- Javascript回调函数
- JavaScript-回调函数
- JavaScript回调函数
- javascript回调函数
- javascript 回调函数
- JavaScript 回调函数
- javascript 回调函数
- JavaScript-回调函数
- 编写uboot下Nor Flash驱动的注意事项
- linux多进程多线程互斥同步例子
- android中有关invisible,visible,gone的区别
- socket 编程——我是服务器
- C语言中关键字auto、static、register、const、volatile、extern的作用
- javascript 回调函数
- 5、因为在web.xml中需要配置8行对于一个servlet,能不能想办法做一个转发,使在web.xml中就配置一行呢?这个构架有点难想
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- 天天记录 - Android ListView itemType使用Holder原理简单分析
- Android学习备忘018——android 三种定位方式
- rhadoop
- tab手势跳转activity
- 关于nginx中upstream机制的思考
- C语言之取整运算