【问题标题】:Block a javascript call till modal exits阻止 javascript 调用直到模式退出
【发布时间】:2015-07-19 06:20:54
【问题描述】:

我正在编写一个简单的 chrome 扩展来通过 Dropbox 上传和共享文件。我想要的工作流程是:

1. Select file to upload.
2. Click upload button.
3. A bootstrap modal opens up asking for email ids to share the file with.
4. Once the user has submitted email id in the modal dialogue box and saved it then
the upload function should be called.

目前发生的情况是出现了模式,但在后台也调用了上传功能,我如何才能阻止它,直到用户成功提交输入。

编辑:

function startUpload()
{
    $('#emailModal').modal({backdrop: 'static'});
    //rest of the code to upload file via ajax call which needs to be
    //stoppped from executing till modal has successfully submitted or exited
}

【问题讨论】:

  • 你尝试了什么?你能提供一些代码吗?
  • 在 Javascript 中,您不会“阻止”执行代码。因为浏览器 Javascript 是单线程的,阻塞或循环会阻止任何其他代码运行,包括您的模式。通常,您将使用上传完成时调用的回调来构建此类问题。
  • @SebastianNette 我已经在编辑中添加了尝试过的代码。

标签: javascript jquery twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

引导模式具有您可以观察的事件。

http://getbootstrap.com/javascript/#modals

hidden.bs.modal 当模式对用户完成隐藏时触发此事件(将等待 CSS 转换完成)​​。

当模态完全消失时,这将触发。

$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
});

您可以做的其他事情是设置您的方法来完成关闭模式的工作。因此,从模态按钮中删除 data-dismiss="modal" 并观察点击事件,运行您的上传内容,然后使用 $('#myModal').modal( '隐藏');

【讨论】:

  • 谢谢,这按预期工作,但有点出乎意料,我在function(e){} 中有一个 if else 块,有时会执行两次。为什么会这样
  • 确保您没有多次调用代码。此外,您可能需要使用 e.preventDefault();以便捕获按钮的默认操作。 api.jquery.com/event.preventdefault
  • 请在此处查看我的代码:codeshare.io/l3OLp startUpload() 函数仅调用一次,但 hidden.bs.modal 仅在页面加载后的第一次运行时完美运行,之后它执行超过下次尝试上传一次
  • 好吧,我发现了一件有趣的事情,每次尝试后的重复次数增加 1,这意味着有一些东西正在持续并持续触发 hidden.bs.modal 事件,但我无法弄清楚可能原因。
  • 如果您多次运行 StartUpload,则需要使用 one()。每次你运行它,你都在添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多