У меня есть вход в модал.Если у входа есть фокус, и я нажимаю на полосу прокрутки модала, то ввод теряет фокус.Как я могу предотвратить это?
По умолчанию браузеры не удаляют фокус ввода, когда вы нажимаете на полосу прокрутки, однако в модале начальной загрузки этого не происходит.
Пример:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.css" rel="stylesheet"/> <!-- Button trigger modal --> <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModalNorm"> Launch Form </button> <!-- Modal --> <div class="modal fade" id="myModalNorm" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <!-- Modal Header --> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true">×</span> <span class="sr-only">Close</span> </button> <h4 class="modal-title" id="myModalLabel"> Modal title </h4> </div> <!-- Modal Body --> <div class="modal-body"> <form role="form"> <div class="form-group"> <label for="exampleInputEmail1">Email address</label> <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email"/> </div> <div class="form-group"> <label for="exampleInputPassword1">Password</label> <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password"/> </div> </form> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </div> </div> </div> </div>
это поведение браузера, вызванное контейнером модала, имеющим атрибут tabindex = "- 1".
Полагаю, уродливым обходным путем будет прослушивание события размытия.Если модал все еще открыт и фокус на нем отсутствует, верните фокус
Не идеальный ответ
var inputs = document.getElementById('myModalNorm').getElementsByTagName('input'); var focused; for(let i=0; i<inputs.length; i++){ inputs[i].addEventListener('focus', function(){ focused = document.activeElement; }); } document.getElementById('myModalNorm').addEventListener('scroll', function(){ if(focused){ focused.focus(); } });