bootbox 使用问题 backdrop无效,无法阻塞,默认获得focus

来源:互联网 发布:烟台软件开发卖 编辑:程序博客网 时间:2024/05/17 10:57

最近boss希望更改掉浏览器默认alert,confirm的提示框,小的我立马按照套路,在网上搜寻到一款使用率较高的bootbox,据说可以替换掉默认alert,confirm。

在后来使用中才发现,这个只有js的bootbox,实际上不过是在简单封装了一下bootstrap中的modal,也就是模态框,帮助我们更简便的搭建,聊胜于无,有了这个,至少能节省不少代码。

1.backdrop

在使用过程中,遇到了几点问题,第一个就是backdrop这个option无效,在注册alert时是可以的,但是在dialog和confirm时就不成功了,具体原因也没有深究,为了实现,点击背景就关闭模态框,没办法,还是回到bootstrap的modal去寻找答案。发现原来backdrop为true,会添加一个蒙层(不知道这么说对不对),而实际实现点击背景就关闭,其实可以在这个蒙层添加一个点击事件就可以

var x=dialog({......});
x.init(function(){$('.modal-backdrop').click(function(){//蒙层的默认类x.modal("hide");//bootstrap modal 的api})});

modal教学 bootstrap modal


2.第二个遇到的问题,就是关于bootbox的阻塞,前面已经说到,其实bootbox的alert,confirm,dialog等,其实就是modal的组建,与原生的alert已经不是同一个概念,原生的alert时稳稳的阻塞,不点击alert的确定,你甭想干别的。

但是目前bootbox,即使你调用init也无法实现阻塞程序进行,立即显示模态框。

所以如果你想完完全全的替代原本的alert,只能通过将后续代码写到回调函数,或者调整模态框显示时机。

但是对于替代原生alert来说,其实是否完全阻塞不是很重要,因为alert只是显示,

可以通过

window.alert=function(msg){var x=bootbox.dialog({......})}
这样就可以直接将原有的alert全部替换为bootbox的alert,如果不放心,还可以加上init。

但是对于confirm这种需要返回值,而你有不想一个一个的改写成回调函数(我都乖乖的改写的),想写出一个完全阻塞的替代,目前我只有一个粗鄙的方法

var flag=false,res=false;function sleep(){  setTimeout(function(){    if(flag){flag=false; return res};    else sleep();},1000);}window.confirm=function(msg){  res=false;  var x=bootbox.confirm({    callback:function(r){       if(r) flag=true;}});}
可以看出,就是无限睡眠,直到用户点击。如果有更高的办法,请联系我

3.第三点就是默认的button类名,可能会默认变为focus,使我们的button的hover颜色,需要去掉focus,就是有额外的鼠标点击或者键盘事件,才能生效。同时focus可能造成误操作,

简单的修改办法,就是自己为button添加类名,就可以覆盖掉原本的类名,自己重写css吧少年,当一个艺术家哟~~



阅读全文
0 0
原创粉丝点击