【问题标题】:Call back function in modal of bootstrap3bootstrap3模态中的回调函数
【发布时间】:2013-10-30 07:36:34
【问题描述】:

我对在 bootstrap3 的 javascript 模式中触发回调函数有点困惑。在正常的jquery.post 你可以这样做,

$.post('path', { something: something }, function(data) { 
  console.log(data);
});

但是在 bootstrap 3 modal 中,我通过脚本触发了 modal,我这样做是基于我如何理解他们网站上的解释。

$('selector').modal('show', function() { 
  //here comes the problem, I have a button in the modal in the html, my code
  //if the button was clicked inside this modal is..

  $('#myButton').on('click', function() { 
     console.log("this is a try");
  });
});

但遗憾的是,如果我单击按钮,什么都没有发生,控制台中也没有记录任何内容。如何在 bootstrap 3 的 modal 中调用回调函数?

【问题讨论】:

    标签: jquery callback twitter-bootstrap-3


    【解决方案1】:

    对于 Bootstrap 3,事件现在已命名空间,因此模式的 show 事件将是 show.bs.modal...

    $('#myModal').on('show.bs.modal', function (e) {
        alert('modal show');
    });
    

    演示:http://bootply.com/90952

    【讨论】:

    • 这在 3.3.1 版本上对我不起作用,可以改进吗?
    • 对不起,它第一次对我不起作用,但我相信这是因为它是点击一个按钮来激活它,但是现在我已经将它分成点击和事件它现在可以工作了。
    • 此事件在模式完全加载之前触发。请参阅 rborodinov 的回答。
    【解决方案2】:

    @Skelly 是对的,你可以像这样使用show.bs.modal 事件:

    $('#myModal').on('show.bs.modal', function (e) {
        alert('modal show');
    });
    

    官方文档说:

    该事件在调用 show 实例方法时立即触发。

    请注意,此事件“很快”会触发,您可能需要改用 shown.bs.modal

    有关此事件的文档:

    当模式对用户可见时触发此事件(将等待 CSS 转换完成)​​。

    这会影响@Keith yeoh's 的回答,您应该尽可能避免超时

    来源: Official Bootstrap documentation

    【讨论】:

    • show.bs.modal 根本不适合我。使用shown.bs.modal 是我的解决方案。谢谢!
    • shown 在模态结束打开时调用,show 在开始打开时调用。您应该弄清楚为什么它不起作用,因为这是意外行为,它们不是彼此的别名。
    • show.bs 和 showN.bs 中有这个小N。感谢您的文档提示! ;)
    【解决方案3】:

    对第一个答案稍微补充一点,这是因为当触发回调时,模态内部的 DOM 尚未完全加载,也许应该在这里做一些小技巧,以便在回调后暂停一段时间的操作。希望对您有所帮助!

    $('#myModal').on('show.bs.modal', function (e) {
        setTimeout(function(){
            // something here
        }, 300);
    });
    

    【讨论】:

    • 超时救命!
    • show.bs.modal 触发时,modal 内部的 DOM 未加载,但shown.bs.modal 触发时,DOM 准备就绪。 show.bs.modal 在模态显示之前触发,shown.bs.modal之后触发。
    【解决方案4】:

    我认为更好的是,使用“shown.bs.modal”它会在模态加载完毕时触发。 Bootstrap modal events

    $('#myModal').on('shown.bs.modal', function (e) {
        alert('modal is allready shown');
    });
    

    【讨论】:

    • 没错! show 是模态开始显示时,完成时显示
    • 这就是答案!谢谢!
    【解决方案5】:

    包裹起来
    $(window).on('load', function() {
        ...modal callback here.
    });
    

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 2013-11-10
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多