Jquery to open Bootstrap v3 modal of remote url

后端 未结 6 1227
孤街浪徒
孤街浪徒 2020-12-01 08:02

I have a page of links to internal pages I need to open up in a Bootstrap modal DIV. The problem is that it seems that using the latest version of Bootstrap v3 in conjunctio

相关标签:
6条回答
  • 2020-12-01 08:15

    In bootstrap-3.3.7.js you will see the following code.

    if (this.options.remote) {
      this.$element
        .find('.modal-content')
        .load(this.options.remote, $.proxy(function () {
          this.$element.trigger('loaded.bs.modal')
        }, this))
    }
    

    So the bootstrap is going to replace the remote content into <div class="modal-content"> element. This is the default behavior by framework. So the problem is in your remote content itself, it should contain <div class="modal-header">, <div class="modal-body">, <div class="modal-footer"> by design.

    0 讨论(0)
  • 2020-12-01 08:16

    From Bootstrap's docs about the remote option;

    This option is deprecated since v3.3.0 and has been removed in v4. We recommend instead using client-side templating or a data binding framework, or calling jQuery.load yourself.

    If a remote URL is provided, content will be loaded one time via jQuery's load method and injected into the .modal-content div. If you're using the data-api, you may alternatively use the href attribute to specify the remote source. An example of this is shown below:

    <a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a>
    

    That's the .modal-content div, not .modal-body. If you want to put content inside .modal-body then you need to do that with custom javascript.

    So I would call jQuery.load programmatically, meaning you can keep the functionality of the dismiss and/or other buttons as required.

    To do this you could use a data tag with the URL from the button that opens the modal, and use the show.bs.modal event to load content into the .modal-body div.

    HTML Link/Button

    <a href="#" data-toggle="modal" data-load-url="remote.html" data-target="#myModal">Click me</a>
    

    jQuery

    $('#myModal').on('show.bs.modal', function (e) {
        var loadurl = $(e.relatedTarget).data('load-url');
        $(this).find('.modal-body').load(loadurl);
    });
    
    0 讨论(0)
  • 2020-12-01 08:18

    So basically, in jquery what we can do is to load href attribute using the load function. This way we can use the url in <a> tag and load that in modal-body.

    <a  href='/site/login' class='ls-modal'>Login</a>
    
    //JS script
    $('.ls-modal').on('click', function(e){
      e.preventDefault();
      $('#myModal').modal('show').find('.modal-body').load($(this).attr('href'));
    });
    
    0 讨论(0)
  • 2020-12-01 08:21

    e.relatedTarget.data('load-url'); won't work
    use dataset.loadUrl

    $('#myModal').on('show.bs.modal', function (e) {
        var loadurl = e.relatedTarget.dataset.loadUrl;
        $(this).find('.modal-body').load(loadurl);
    });
    
    0 讨论(0)
  • 2020-12-01 08:30

    A different perspective to the same problem away from Javascript and using php:

    <a data-toggle="modal" href="#myModal">LINK</a>
    
    <div class="modal fade" tabindex="-1" aria-labelledby="gridSystemModalLabel" id="myModal" role="dialog" style="max-width: 90%;">
        <div class="modal-dialog" style="text-align: left;">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="modal-title">Title</h4>
                </div>
                <div class="modal-body">
                    <?php include( 'remotefile.php'); ?>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>
    

    and put in the remote.php file your basic html source.

    0 讨论(0)
  • 2020-12-01 08:38

    If using @worldofjr answer in jQuery you are getting error:

    e.relatedTarget.data is not a function

    you should use:

    $('#myModal').on('show.bs.modal', function (e) {
        var loadurl = $(e.relatedTarget).data('load-url');
        $(this).find('.modal-body').load(loadurl);
    });
    

    Not that e.relatedTarget if wrapped by $(..)

    I was getting the error in latest Bootstrap 3 and after using this method it's working without any problem.

    0 讨论(0)
提交回复
热议问题