如何设置一个javascript 的回调函数!

epui2008 2019-04-30 10:05:48
也许不叫回调函数,它的功能类似 于 layer 中的 这个:

写法是这样的
layer.msg('删除成功!', 
{

time: 2000 //2秒关闭(如果不配置,默认是3秒)
},
function(){
//do something
});


这段代码的作用是 先弹出一个 2秒后自动消失的 提示框,等提示框消失后 执行 下面的 函数;

所以我就是想要个这样的函数;

1 我查看了这个layer。msg 的实现方法
是下面这段代码,压根看不懂

msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",


2 我不想用现成的这个框架
3 咱们目的是封装一个 jquery,bootstrap 的一个简单的函数 ,目前 我的 showtooltip 函数是这样写的 ——————
//tip是提示信息,type:'success'是成功信息,'danger'是失败信息,'info'是普通信息
function ShowTip(tip, type) {
var $tip = $('#tip');

// if ($tip.length == 0) {
$tip = $('<div id="tip" style="font-weight:bold;position:fixed;width:350px;top:50px;left:50%;margin-left:-175px;z-index:9999"> <a href="#" class="close" data-dismiss="alert">×</a >'+tip+'</div>');


$('body').append($tip);
//}
$tip.stop(true).attr('class', 'alert alert-' + type).fadeIn(500).delay(2000).fadeOut(500);
}




使用的时候是这样
 ShowTip("删除成功!", "success");
window.location.href = "/Article/List";


目的就是 提示删除成功之后 ,让页面跳转;但是这个函数 基本是同步执行的,所以没看到提示信息就跳转了;

所以 ,如何能改进一下这个方法呢?请教一下js高手,先谢谢您啦!
...全文
479 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
专业前端小白 2019-04-30
  • 打赏
  • 举报
回复
function test(num,callback){ console.log(num); if(callback && typeof callback === "function") { //判断存在并且是函数 callback(); } } test(5,function(){ console.log(6); }); 执行后输出为:
Hello World, 2019-04-30
  • 打赏
  • 举报
回复
3楼的正解,如果参数比较多,又有些有默认值的话可以像$.ajax一样设置默认值,再合并用户输入的值,这样比较灵活
    function ShowTip(options) {
var defaultOptions = {
tip: '默认的消息',
type: '默认的类别',
url: '/default.html',
fadeIn: 500,
fadeOut: 500,
delay: 2000
};

options = $.extend({}, defaultOptions, options);
$('#tip').remove();
var $tip = $('<div id="tip" style="font-weight:bold;position:fixed;width:350px;top:50px;left:50%;margin-left:-175px;z-index:9999"> <a href="#" class="close" data-dismiss="alert">×</a >' + options.tip + '</div>');
$('body').append($tip);
$tip.stop(true).attr('class', 'alert alert-' + options.type)
.fadeIn(options.fadeIn)
.delay(options.delay)
.fadeOut(options.fadeOut, function () {
if (options.url != '')
window.location.href = options.url;
});
}
ShowTip({
tip: 'Some message',
type: 'A',
url: 'www.baidu.com'
});
2019-04-30
  • 打赏
  • 举报
回复
fadeOut加个回调函数跳转

function ShowTip(tip, type, url) {
    var $tip = $('#tip');
    
   // if ($tip.length == 0) {
        $tip = $('<div id="tip" style="font-weight:bold;position:fixed;width:350px;top:50px;left:50%;margin-left:-175px;z-index:9999"> <a href="#" class="close" data-dismiss="alert">×</a >'+tip+'</div>');
             
 
        $('body').append($tip);
    //}
    $tip.stop(true).attr('class', 'alert alert-' + type).fadeIn(500).delay(2000).fadeOut(500, function(){
		if(url){
			window.location.href = url;
		}
	});
}
ShowTip("删除成功!", "success", "/Article/List");
丰云 2019-04-30
  • 打赏
  • 举报
回复

    msg.show();
    setTimeout(function () { 
         msg.hide(); 
         localhost.href = 'xxx';
    }, 3000);
丰云 2019-04-30
  • 打赏
  • 举报
回复
用settimeout就行了
epui2008 2019-04-30
  • 打赏
  • 举报
回复
感谢!感谢!虽然对于回调函数还不太懂,但是问题已经解决,回调函数我回头再慢慢研究。谢谢大家的指点!
2019-04-30
  • 打赏
  • 举报
回复

function ShowTip(tip, type, callback) {
    var $tip = $('#tip');
    
   // if ($tip.length == 0) {
        $tip = $('<div id="tip" style="font-weight:bold;position:fixed;width:350px;top:50px;left:50%;margin-left:-175px;z-index:9999"> <a href="#" class="close" data-dismiss="alert">×</a >'+tip+'</div>');
             
 
        $('body').append($tip);
    //}
    $tip.stop(true).attr('class', 'alert alert-' + type).fadeIn(500).delay(2000).fadeOut(500, callback);
}
ShowTip("删除成功!", "success", function(){
	window.location.href = "/Article/List";
});
epui2008 2019-04-30
  • 打赏
  • 举报
回复
引用 3 楼 囧 的回复:
fadeOut加个回调函数跳转

function ShowTip(tip, type, url) {
    var $tip = $('#tip');
    
   // if ($tip.length == 0) {
        $tip = $('<div id="tip" style="font-weight:bold;position:fixed;width:350px;top:50px;left:50%;margin-left:-175px;z-index:9999"> <a href="#" class="close" data-dismiss="alert">×</a >'+tip+'</div>');

 
        $('body').append($tip);
    //}
    $tip.stop(true).attr('class', 'alert alert-' + type).fadeIn(500).delay(2000).fadeOut(500, function(){
		if(url){
			window.location.href = url;
		}
	});
}
ShowTip("删除成功!", "success", "/Article/List");
不错,感谢回复! 如果把url 这个地方换成一个function 呢,因为有的地方不一定是跳转,写成一个function 更方便 就是我引用的时候这样引用 shwotip("删除成功","success",function(){ alert("再弹出"); $(".abb").remove(); }); 函数哪里应该怎么写呢?
JavaScript核心技术 简介: 《JavaScript核心技术》对于各种浏览器、浏览器版本、JavaScript版本、DOM版本的介绍,有助于我们理解所遇到的各种新旧代码,使我们能够对这些代码做出正确的取舍。《JavaScript核心技术》还提供了一些使用JavaScript的最佳实践。无论是新手还是老手,这些如何正确使用JavaScript的经验都能帮助他们养成良好的编程习惯。《JavaScript核心技术》还介绍了一些调试和开发JavaScript的工具,这些工具无疑能够提高我们的开发效率。 《JavaScript核心技术》最后对于Ajax和几个流行的JavaScript库的介绍,无疑会开阔我们在JavaScript使用上的思路。 《JavaScript核心技术》是一本真正意义上的“新书”,不仅介绍了最新的JavaScript知识和方向,还完全覆盖了当今Web开发中关于JavaScript的所有重要话题,它使用了大量实例代码,图文并茂地讲解了使用JavaScript的各个层次和领域的内容。它不是一本参考手册,但却是一本值得拥有的教程。 JavaScript核心技术 目录: 前言 第1章JavaScript初探 1.1规范和实现相互交织的历史 1.2跨浏览器的不兼容性和其他常见的JavaScript传说 1.3你能用JavaScript来做什么 1.4JavaScript初探:“HelloWorld!” 1.5JavaScript沙箱 1.6可访问性和JavaScript的最佳实践 第2章JavaScript数据类型与变量 2.1变量的标识 2.2作用域 2.3简单类型 2.4常量:有名称但不改变 2.5习题 第3章运算符和语句 3.1JavaScript语句的格式 3.2简单语句 3.3条件语句和程序流 3.4条件运算符 3.5逻辑运算符 3.6高级语句:循环语句 3.7习题 第4章JavaScript对象 4.1对象构造函数 4.2Number对象 4.3String对象 4.4正则表达式与RegExp 4.5有专门用途的对象:Date和Math 4.6JavaScript数组 4.7关联数组:不是数组的数组 4.8习题 第5章函数 5.1定义函数:细数所有方式 5.2回调函数 5.3函数和递归 5.4嵌套函数、函数闭包和内存泄漏 5.5作为对象的函数 5.6习题 第6章捕捉事件 6.1O级DOM上的事件句柄 6.22级DOM上的事件句柄 6.3产生事件 6.4习题 第7章表单与即时验证 7.1访问表单 7.2把事件附加在表单上:不同的方法 7.3选择列表 7.4单选按钮和复选框 7.5输入字段和JiT正则表达式 7.6习题 第8章沙箱及之上的cookie、连通性和隐私 第9章基础浏览器对象 第10章DOM:文档对象模型 第11章创建定制的JavaScript对象 第12章构建动态网页:在脚本中加入样式 第13章使用Ajax 第14章好消息:生动的程序库!令人惊异的Web服务!有趣的API! 附录习题答案

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧