【问题标题】:Load cloned modal (bootstrap)加载克隆的模态(引导程序)
【发布时间】:2018-11-06 14:05:49
【问题描述】:

是否可以使用引导程序加载新克隆的模态?

我需要加载许多不同的模态,但下面是一个尝试仅加载一个新模态的示例。

我看到有关在模态中加载克隆元素的问题,但不是完全克隆的模态。

这是一个问题:http://jsfiddle.net/hde13s2t/6/

步骤:

  1. 用户点击“克隆”来克隆模态

  2. Javascript 克隆模态并将适当的标签重命名为“克隆”(按钮和模态标签)

  3. 用户点击克隆的模态-->“Launch demo modal 2”

html 都正确加载,但新模式没有触发。

HTML:

<!-- Button trigger modal -->
<div id="launchmodal1">

  <button type="button" class="btn btn-primary" data-toggle="modal" id="examplemodalbutton1" data-target="#exampleModal1">
    Launch demo modal 1
  </button>

  <!-- Modal -->
  <div class="modal fade" id="exampleModal1" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          ...
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
          <button type="button" class="btn btn-primary">Save changes</button>
        </div>
      </div>
    </div>
  </div>
 </div>
</div>
<button type="button" class="btn btn-secondary" id="clicktoclone">Clone</button>

Javascript:

$(document).on("click", "#clicktoclone", function() {
    var secondmodal = $("#launchmodal1").clone();

  // updating button id and data-target for modal 2
  secondmodal.find("#examplemodalbutton1").attr("id", "examplemodalbutton2").attr("data-target", "exampleModal2").html("Launch demo modal 2");

  // updating modal id for modal 2
  secondmodal.find("#exampleModal1").attr("id", "examplemodal2");

  secondmodal.appendTo('#launchmodal2');
});

【问题讨论】:

    标签: javascript jquery twitter-bootstrap bootstrap-4 bootstrap-modal


    【解决方案1】:

    jQuery.clone 不会为新的 DOM 元素克隆引导事件。因此,您必须在新模态附加到 DOM 树后设置模态调用:

    $(document).on("click", "#clicktoclone", function() {
        var secondmodal = $("#launchmodal1").clone();
    
      // updating button id and data-target for modal 2
      secondmodal.find("#examplemodalbutton1").attr("id", "examplemodalbutton2").attr("data-target", "exampleModal2").html("Launch demo modal 2");
    
      // updating modal id for modal 2
      secondmodal.find("#exampleModal1").attr("id", "examplemodal2");
    
      secondmodal.appendTo('#launchmodal2');
    
      // set new click event to show the cloned modal
      $('#examplemodalbutton2').on('click', function() {
        $('#examplemodal2').modal();
      })
    });
    

    如果您有多个模态的克隆,您可以将全局单击事件侦听器绑定到所有模态按钮:

      $(document).on('click', '.btn', function() {
        var targetSelector = $(this).data('target');
        $(targetSelector).modal();
      })
    

    【讨论】:

    • 谢谢!我将如何做到这一点,以便它可以加载大量模式(即,为模式 x 设置一个新的点击事件)?我可以拥有多达 100 多个模态...
    • 谢谢。全局单击事件侦听器似乎不起作用。见这里:jsfiddle.net/hde13s2t/21我做错了吗?
    • 请检查您的新 ID 和目标值:.attr("data-target", "exampleModal2") 应该是 .attr("data-target", "#exampleModal2") 和 .attr( "id", "examplemodal2") 应该是 .attr("id", "exampleModal2")
    • 令人惊讶的是,如果 ID 和目标值正确,则不需要全局单击事件侦听器。 Bootstrap 自己设置一个全局监听器。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2019-11-19
    • 2014-10-03
    • 2016-12-17
    相关资源
    最近更新 更多