Javascript 在事件上返回false可防止事件随后发生
背景 我有一个引导模式,弹出并显示输入表单,如果用户进行更改并取消/关闭模式,确认框将标识他们将丢失更改 模式触发两个事件,Javascript 在事件上返回false可防止事件随后发生,javascript,jquery,Javascript,Jquery,背景 我有一个引导模式,弹出并显示输入表单,如果用户进行更改并取消/关闭模式,确认框将标识他们将丢失更改 模式触发两个事件,hide当模式开始关闭时,以及hidden当模式完全关闭时 我正在拦截hide事件: .on('hide',function(){ if(confirm('close')) return true; else return false; }); 如果我关闭框并点击Ok,模态将关闭 如果我点击cancel,模式将保持打开状态(
hide
当模式开始关闭时,以及hidden
当模式完全关闭时
我正在拦截hide
事件:
.on('hide',function(){
if(confirm('close'))
return true;
else
return false;
});
如果我关闭框并点击Ok,模态将关闭
如果我点击cancel,模式将保持打开状态(这是正确的),但在它不会继续默认事件后,我将点击Ok
- 点击OK(工作)
- 点击取消(工作)
- 点击取消后点击OK(失败)
preventDefault()代码>,但我无法确定如何在取消操作后使事件继续
可在此处进行测试:
在控制台中输入:
$('#responsive')。on('hide',function(){if(confirm('close))返回true;else返回false;})代码>您正在使用哪个版本的引导
是否将.on('hide')事件附加到模态元素?例如:
$('.modal').on('hide', function(){...});
我使用Bootstrap 3中模态的示例标记在JS Fiddle()中测试了您的代码,它在Chrome Canary中对我有效。深入了解隐藏函数Bootstrap-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();
好像你在说模态代码中有一个bug。@Cookie Monster我不会说它是模态代码,确认对话框通常不在那里-我只是用on事件截获close it来添加一个确认框它是模态代码定义hide
事件并响应返回值,是吗?@cookiemonster你说得对,我找到了问题所在-谢谢!使用modal manager的最新版本,我附加了一个到作者站点的链接,您可以通过控制台对其进行测试。编辑:有趣的是,它的工作方式可能是事件的顺序,也可能是模态管理器。非常感谢。
if (!this.isShown || e.isDefaultPrevented()) return (this.isShown = true);