Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bootstrap modal restores button focus on close

I am in very difficult struggle with one effect, which I believe is wanted in Bootstrap, but I want to escape. I have button:

<a data-toggle="modal" data-target="#video" class="btn btn-primary btn-lg" href="#">Video<i class="pe-7s-angle-right pe-2x pe-va" style="line-height: 0.3;"></i></a>

Which opens modal window with some video:

<div class="modal fade video-lightbox in" id="video" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false" style="display: block;"><div class="modal-backdrop fade in" style="height: 442px;"></div>

So when I close the modal, my button gets in focus automatically. Is this effect wanted in Bootstrap and how can I escape it ? I don`t want my button to be in focus after closing the modal.

like image 467
Alexander Nikolov Avatar asked May 19 '15 10:05

Alexander Nikolov


3 Answers

Blur buttons when modal closes.

$('body').on('hidden.bs.modal', '.modal', function() {
    $('.btn').blur();
}); 
like image 153
spitz Avatar answered Nov 03 '22 23:11

spitz


You can use this method, to make the modal-trigger loose focus when you close the modal:

$('#myModal').on('shown.bs.modal', function (e) {
    $('#modalTrigger').one('focus', function (e) {
        $(this).blur();
    });
});

Example:

$(document).ready(function() {
    $('#myModal').on('shown.bs.modal', function (e) {
        $('#modalTrigger').one('focus', function (e) {
            $(this).blur();
        });
    });
});
<!DOCTYPE html>
<html lang="en">
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
</head>
<body>
  <button id="modalTrigger" type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">
    Open modal
  </button>

  <!-- The Modal -->
  <div class="modal" id="myModal">
    <div class="modal-dialog">
      <div class="modal-content">
      
        <!-- Modal Header -->
        <div class="modal-header">
          <h4 class="modal-title">Modal</h4>
          <button type="button" class="close" data-dismiss="modal">&times;</button>
        </div>
        
        
        <!-- Modal footer -->
        <div class="modal-footer">
          <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
        </div>
      </div>
    </div>
  </div>
</body>
</html>
like image 3
Hooman Bahreini Avatar answered Nov 03 '22 23:11

Hooman Bahreini


You can simply write a function into your custom.js file.

$(document).ready(function() {
    $('.close')on("click", function() {
        $(".btn").blur();
    });
});
like image 2
Nilesh Mahajan Avatar answered Nov 03 '22 22:11

Nilesh Mahajan