【问题标题】:bootstrap 3 modal - javascript available multiple timesbootstrap 3 modal - javascript 可多次使用
【发布时间】:2013-11-14 20:09:45
【问题描述】:

我正在使用带有远程源的 bootstrap 3 模态对话框。 我的问题是我在这些远程源中使用了外部 JavaScript 和脚本块。当我打开和关闭一个模态对话框然后重新打开它时,JavaScript 会加载两次。

如何在重新打开模态对话框时禁止再次加载相同的 JavaScript 文件?或者关闭对话框时如何销毁加载的JavaScript?

JavaScript

$(function() {
    $('[data-load-remote]').on('click',function(e) {
        e.preventDefault();
        var $this = $(this);
        var remote = $this.data('load-remote');
        if(remote) {
            $($this.data('remote-target')).load(remote);
        }
    });
});

HTML

<a href="#myModal" role="button" class="btn" data-toggle="modal" 
   data-load-remote="http://localhost/dashboard/myprices"
   data-remote-target="#myModal .modal-body">My Salon (Preview)</a>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"
                aria-hidden="true">&times;</button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">
      </div>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

【问题讨论】:

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


    【解决方案1】:

    您可以使用另一个data- 属性来检查它是否已加载:

    isloaded="false" 添加到您的锚标记中,如下所示:

    <a data-isloaded="false" href="#myModal" role="button" class="btn" data-toggle="modal" 
       data-load-remote="http://localhost/dashboard/myprices" 
       data-remote-target="#myModal .modal-body">My Salon (Preview)</a>
    

    然后您可以使用$this.data('isloaded') 检查它是否已加载。如果有,请离开那里,如果没有,请加载并设置标志,如下所示:$this.data('isloaded', true)

    这里有一些 JavaScript

    $(function() {
        $('[data-load-remote]').on('click',function(e) {
            e.preventDefault();
            var $this = $(this);
            var remote = $this.data('load-remote');
            if (!$this.data('isloaded')) {
                if(remote) {
                    $($this.data('remote-target')).load(remote);
                    $this.data('isloaded', true)
                }
            }
        });
    });
    

    jsFiddle


    UPDATE根据评论进行澄清

    来自custom data attributes 上的 HTML5 规范:

    每个HTML 元素 可以指定任意数量的自定义数据属性,并带有任意值。

    即没有预定义的data-isloaded,与没有预定义的data-load-remote 相同。您可以轻松地将其称为data-kylePromisesTheValueIsLoaded。只要 那就是您传递给.data() 方法的字符串,然后它将读取/写入该属性的值。

    【讨论】:

    • 感谢您的回答,我不知道 data-isloaded 属性!但是我忘记了要提的一点。我有两个不同的远程源,其中包括相同的外部 js 文件!由于性能原因,我无法在主页中嵌入外部 js(以便它可用于两个远程源)!是否有可能破坏加载的 JavaScript?或将其从 DOM 中删除?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多