bootstrap 3 modal - javascript可用多次

时间:2013-11-14 20:09:45

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

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

重新打开模态对话框时,如何禁止再次加载相同的JavaScript文件?或者如何在关闭Dialog时销毁加载的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 -->

1 个答案:

答案 0 :(得分:2)

您可以使用其他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


更新,以便根据评论进行说明

来自custom data attributes的HTML5规范:

  

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

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