3

我正在使用带有远程源的 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 -->
4

1 回答 1

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


更新根据评论进行澄清

来自自定义数据属性的 HTML5 规范:

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

即没有预定义data-isloaded,就像没有预定义一样data-load-remote。你可以很容易地调用它data-kylePromisesTheValueIsLoaded。只要这是您传递给.data()方法的字符串,它就会读取/写入该属性的值。

于 2013-11-14T21:13:00.637 回答