js关于利用modal模拟confirm的阻塞问题

大家好,本人最近想重写js的confirm界面,然后用到了bootbox.js这种模拟弹出框的插件,它的基本写法如下:

bootbox.confirm('确定无误吗?', function(result){});

然后把后面执行步骤写到回调函数就可以了,十分方便,但是js的confirm有着阻塞浏览器的作用,而bootbox只能把后续步骤写到回调函数里边,后面如果不再用bootbox的话删除会有那么一点点麻烦。。。
所以我想问一下有没有方法可以修饰bootbox达到阻塞的作用,类似效果如下:

$('div').on('click',function(){
    //不点击确定取消不能执行后续的代码...
    bootbox.confirm('确定无误吗?', function(result){if(!result)return});
    //后续代码写到这个位置
    code...
})

本人菜鸟看到js发展到es6以为这个问题可以有新的简单的写法,本来的想法也不是为了走极端,非常感谢每位大神的回答,我就选个最长的采纳吧。。

阅读 10.4k
7 个回答

首先这部分有问题

 bootbox.confirm('确定无误吗?', function(result){if(!result)return});//注
 //后续代码写到这个位置
 code...

注: 此处需要返回值, 并且在下方判断其返回值true|false, 是否执行下面的代码.

再备注: 回调函数为两个, 点击确定的回调, 点击取消的回调.//这样写就可以绕过阻塞.

我想到一个办法, 就是
var i = 0; while(true){i++; if(i > 50)break;}
点到为止, 比较low, 并且性能低, 但是为了阻塞拼了.

所谓达到阻塞的作用,就是点击confirm的取消,确定按钮才执行后面的代码,这不就是回调函数的作用吗?把你的后续代码写到回调函数里不就行了?

你如果觉得以后删除这个代码有点麻烦,就把回调函数独立声明,到时候删除代码的时候,可以只删除modal的调用就好了

没有办法做到真正意义上是阻塞运行
唯一能做到的就是把代码运行代码分块,再用户操作后进行回调调用
或许你可以用递归或者循环的方式来模拟,但正如前面所说,并不是真正意义上的阻塞运行

把 code 写到回调里

不可能,必须用回调。

很多东西都是机制规定的,不可能任意修改。

新手上路,请多包涵

使用co与yield

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏