Bootstrap 4 input field in popover

前端 未结 1 751
清歌不尽
清歌不尽 2021-01-06 12:21

The problem is described in title. I have a Bootstrap 4 modal and one popover with input field with buttons. In IE 11 everything is ok, but in Firefox input loses focus.

相关标签:
1条回答
  • 2021-01-06 12:37

    There is a simple mistake, you have tabindex="-1" in your modal so your input focus is removing by it.


    For Bootstrap 4

    MODAL + INPUT POPOVER

    $(function () {
      $('[data-toggle="popover"]').popover({
          container: 'body',
          title: 'Search',
          html: true,
          placement: 'bottom',
          sanitize: false,
          content: function () {
              return $("#PopoverContent").html();
          }
      });
    })
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    
    <section>
        <div id="PopoverContent" class="d-none">
            <div class="input-group">
                <input type="text" class="form-control" placeholder="Recipient's username"
                       aria-label="Recipient's username with two button addons" aria-describedby="button-addon1">
                <div class="input-group-append" id="button-addon1">
                    <button class="btn btn-outline-primary" type="button" data-toggle="popover" data-placement="bottom"
                            data-html="true" data-title="Search">
                        <i class="fas fa-search"></i>
                    </button>
                </div>
            </div>
        </div>
    </section>
    <section>
        <div class="modal fade" id="exampleModal" 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">Test modal</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 class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="input-group">
                                        <input type="text" class="form-control" placeholder="Recipient's username"
                                            aria-label="Recipient's username with two button addons"
                                            aria-describedby="button-addon4">
                                        <div class="input-group-append" id="button-addon4">
                                            <button class="btn btn-outline-primary" type="button" data-toggle="popover">
                                                <i class="fas fa-user-plus"></i>
                                            </button>
                                            <button class="btn btn-outline-danger" type="button">
                                                <i class="fas fa-user-minus"></i>
                                            </button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </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>
    </section>
    <div class="container">
        <div class="row">
            <div class="col mt-5">
                <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
                    Launch demo modal
                </button>
            </div>
        </div>
    </div>
    
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
    <script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js"></script>

    INPUT POPOVER + INSIDE CONTENT

    $(function () {
        $('[data-toggle="popover"]').popover({
        container: 'body',
        html: true,
        placement: 'bottom',
        sanitize: false,
        content: 
        `<div id="PopoverContent">
          <div class="input-group">
            <input type="text" class="form-control" placeholder="Recipient's username"
                 aria-label="Recipient's username with two button addons" aria-describedby="button-addon1">
            <div class="input-group-append" id="button-addon1">
              <button class="btn btn-outline-primary" type="button" data-toggle="popover" data-placement="bottom"
                  data-html="true" data-title="Search">
                <i class="fas fa-search"></i>
              </button>
            </div>
          </div>
        </div>`
        })
    });
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"> 
    
    <button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title">Click to toggle popover</button>
    
    <script src="https://code.jquery.com/jquery-3.4.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

    INPUT POPOVER + OUTSIDE CONTENT

    $(function () {
        $('[data-toggle="popover"]').popover({
        container: 'body',
        html: true,
        placement: 'bottom',
        sanitize: false,
        content: function() {
            return $('#PopoverContent').html()
        }
        })
    });
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"> 
    
    <div id="PopoverContent" class="d-none">
      <div class="input-group">
        <input type="text" class="form-control" placeholder="Recipient's username"
             aria-label="Recipient's username with two button addons" aria-describedby="button-addon1">
        <div class="input-group-append" id="button-addon1">
          <button class="btn btn-outline-primary" type="button" data-toggle="popover" data-placement="bottom"
              data-html="true" data-title="Search">
            <i class="fas fa-search"></i>
          </button>
        </div>
      </div>
    </div>
    
    <button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title">Click to toggle popover</button>
    
    <script src="https://code.jquery.com/jquery-3.4.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>


    For Bootstrap 5

    MODAL + INPUT POPOVER

    const popover = new bootstrap.Popover(document.querySelector('.callPopover'), {
        container: 'body',
        title: 'Search',
        html: true,
        placement: 'bottom',
        sanitize: false,
        content() {
            return document.querySelector('#PopoverContent').innerHTML;
        }
    })
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"> 
    
    <section>
        <div id="PopoverContent" class="d-none">
            <div class="input-group">
                <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username with two button addons" aria-describedby="button-addon1">
                <button class="btn btn-outline-primary" type="button" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-html="true" data-bs-title="Search">
                    <i class="fas fa-search"></i>
                </button>
            </div>
        </div>
    </section>
    <section>
        <div class="modal fade" id="exampleModal" 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">Test modal</h5>
                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                    </div>
                    <div class="modal-body">
                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="input-group">
                                        <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username with two button addons" aria-describedby="button-addon4">
                                        <button class="btn btn-outline-primary callPopover" type="button" data-bs-toggle="popover">
                                            <i class="fas fa-user-plus"></i>
                                        </button>
                                        <button class="btn btn-outline-danger" type="button">
                                            <i class="fas fa-user-minus"></i>
                                        </button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                        <button type="button" class="btn btn-primary">Save changes</button>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <div class="container">
        <div class="row">
            <div class="col mt-5">
                <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
                    Launch demo modal
                </button>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
    <script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js"></script>

    INPUT POPOVER + INSIDE CONTENT

    const popover = new bootstrap.Popover(document.querySelector('[data-toggle="popover"]'), {
        container: 'body',
        title: 'Search',
        html: true,
        placement: 'bottom',
        sanitize: false,
        content: `<div id="PopoverContent">
          <div class="input-group">
            <input type="text" class="form-control" placeholder="Recipient's username"
                 aria-label="Recipient's username with two button addons" aria-describedby="button-addon1">
              <button class="btn btn-outline-primary" type="button" data-toggle="popover" data-placement="bottom"
                  data-html="true" data-title="Search">
                <i class="fas fa-search"></i>
              </button>
          </div>
        </div>`
    })
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
    
    <button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title">Click to toggle popover</button>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
    <script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js"></script>

    INPUT POPOVER + OUTSIDE CONTENT

    const popover = new bootstrap.Popover(document.querySelector('.callPopover'), {
        container: 'body',
        title: 'Search',
        html: true,
        placement: 'bottom',
        sanitize: false,
        content() {
            return document.querySelector('#PopoverContent').innerHTML;
        }
    })
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
    
    <div id="PopoverContent" class="d-none">
      <div class="input-group">
        <input type="text" class="form-control" placeholder="Recipient's username"
             aria-label="Recipient's username with two button addons" aria-describedby="button-addon1">
        <button class="btn btn-outline-primary" type="button" data-toggle="popover" data-placement="bottom"
              data-html="true" data-title="Search">
            <i class="fas fa-search"></i>
        </button>
      </div>
    </div>
    
    <button type="button" class="btn btn-lg btn-danger callPopover" data-toggle="popover" title="Popover title">Click to toggle popover</button>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
    <script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js"></script>

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