Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在事件上返回false可防止事件随后发生_Javascript_Jquery - Fatal编程技术网

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);