2014-01-08 85 views
0

背景 我有一个引导模式是弹出窗口,并显示输入表单,如果用户进行了更改,取消/关闭模式确认框将确定他们将失去的变化。返回事件虚假防止事件存在的事后

当模态完全关闭时,模态激发两个事件,hidehidden

我拦截hide事件有:

.on('hide',function(){ 
    if(confirm('close')) 
     return true; 
    else 
     return false; 
}); 

如果我关闭对话框,点击OK,该模式将关闭。

如果我点击取消,模式将保持打开状态(这是正确的),但是在它不会继续默认事件后,我会点击Ok。

  • 命中OK(作品)
  • 击取消(作品)
  • 击中取消后点击OK(失败)

我试图preventDefault();很好,但我无法弄清楚如何获得该事件在取消操作后继续。

可以在这里进行测试:

http://jschr.github.io/bootstrap-modal/

输入控制台:

$('#responsive').on('hide', function() { if(confirm('close)) return true; else return false;});

+0

看起来像你说的那样,模态代码中存在一个错误。 –

+0

@cookiemonster我不会说它的模态代码,确认对话框通常不存在 - 我只是使用事件来拦截关闭它来添加一个确认框 –

+0

这是模态代码,它定义了“隐藏”事件并回应返回值,不是吗? –

回答

0

潜入模态管理器中的隐藏功能的自举-modal.js线84的源代码:

e && e.preventDefault(); 
e = $.Event('hide'); 
this.$element.trigger(e); 
if (!this.isShown || e.isDefaultPrevented()) return (this.isShown = false); <-- 
this.isShown = false; 
this.escape(); 
this.tab(); 

this.isShown设置为false使恒定环路,它应该被设置为真因为当你触发e.preventDefault()时,模态不会被隐藏。所以修复是:

if (!this.isShown || e.isDefaultPrevented()) return (this.isShown = true); 
0

您正在使用什么版本的引导呢?

您是否将.on('hide')事件附加到模态元素?例如:

$('.modal').on('hide', function(){...}); 

我测试使用的示例标记你的JS代码菲德尔(http://jsfiddle.net/5kbXZ/)从引导3一个模式,它是在Chrome金丝雀为我工作。

+0

使用带有模式管理器的最新版本,我附加了一个指向作者网站的链接,您可以通过控制台对其进行测试。编辑:有趣的是,它的作品可能是事件顺序或模式管理器。谢谢! –