Как настроить фокус на первый ввод текста в модальном бутстрапе после показа

Я загружаю динамический bootstrap modal и содержит несколько текстовых входов. Проблема, с которой я сталкиваюсь, что я хочу, чтобы курсор фокусировался на первом входе в этом модале, и по умолчанию это не происходит.
Поэтому я написал этот код, чтобы сделать это:

$('#modalContainer').on('show', function () {
   $('input:text:visible:first').focus();
});

Но теперь он фокусируется на входе на мгновение, а затем автоматически уходит, почему это происходит и как решить?

Ответ 1

@scumah имеет для вас ответ: Twitter-бутстрап - сосредоточьтесь на textarea внутри модального клика

Для Bootstrap 2

modal.$el.on('shown', function () {
$('input:text:visible:first', this).focus();
});  

Обновление: для Bootstrap 3

$('#myModal').on('shown.bs.modal', function () {
    $('#textareaID').focus();
})  

========== Обновление ======

В ответ на вопрос вы можете использовать это с несколькими модалами на одной странице, если вы укажете разные целевые данные, переименуйте свои идентификаторы модалов, чтобы соответствовать и обновлять идентификаторы полей ввода формы, и, наконец, обновить свой JS до соответствуют этим новым идентификаторам:
см. http://jsfiddle.net/panchroma/owtqhpzr/5/

HTML

...
<button ... data-target="#myModal1"> ... </button> 
... 
<!-- Modal 1 -->
<div class="modal fade" id="myModal1" ...>
... 

<div class="modal-body"> <textarea id="textareaID1" ...></textarea></div>

JS

$('#myModal1').on('shown.bs.modal', function() {
  $('#textareaID1').focus();
})

Ответ 2

Я нашел лучший способ сделать это без jQuery.

<input value="" autofocus>

отлично работает.

Это атрибут html5. Поддерживается всеми основными браузерами.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input

Ответ 3

Ответ Дэвида Тайароа правильный, но он не работает, потому что время "затухания" в модальном режиме не позволяет вам сосредоточиться на вводе. Вам нужно создать задержку:

$('#myModal').on('shown.bs.modal', function () {
    ...
    setTimeout(function (){
        $('#textareaID').focus();
    }, 1000);

})

Ответ 4

Обычный код (ниже) не работает для меня:

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})

Я нашел решение:

$('body').on('shown.bs.modal', '#myModal', function () {
    $('input:visible:enabled:first', this).focus();
})

подробнее здесь

Ответ 5

Я получил эту загрузку, добавив следующую информацию на свою страницу:

Из-за того, как HTML5 определяет свою семантику, атрибут HTML автофокуса не влияет на модальность Bootstrap. Чтобы добиться такого же эффекта, используйте некоторые пользовательские JavaScript:

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})

http://getbootstrap.com/javascript/#modals

Ответ 6

попробуйте этот код, он может сработать для вас

$(this).find('input:text')[0].focus();

Ответ 7

Это простой код, который будет работать лучше всего на всех всплывающих окнах, которые имеют любое поле ввода с фокусировкой на него

$(".modal").on('shown.bs.modal', function () {
    $(this).find("input:visible:first").focus();
});

Ответ 8

Я думаю, что самый правильный ответ, предполагающий использование jQuery, - это консолидация аспектов всех ответов на этой странице, плюс использование события, которое передает Bootstrap:

$(document).on('shown.bs.modal', function(e) {
  $('input:visible:enabled:first', e.target).focus();
});

Он также будет работать с изменением $(document) на $('.modal') или добавить класс в модальный, который сигнализирует о том, что этот фокус должен произойти, например $('.modal.focus-on-first-input')

Ответ 9

Если вы хотите просто автофокусировать любой модальный, который был открыт, вы можете поместить в него шаблоны или функции lib, этот фрагмент, который будет сфокусирован на первом вводе:

$('.modal').on('shown.bs.modal', function () {
  $(this).find('input:first').focus();
})

Ответ 10

Первый шаг, вы должны установить свой атрибут autofocus при вводе формы.

<input name="full_name" autofocus/>

И затем вам нужно добавить объявление, чтобы настроить автофокус ваших входов после показа модальности.
Попробуйте этот код:

$(document).on('ready', function(){
    // Set modal form input to autofocus when autofocus attribute is set
    $('.modal').on('shown.bs.modal', function () {
        $(this).find($.attr('autofocus')).focus();
    });
});

Ответ 11

$(document).ready(function() {
  $("#button").click(function() {
    $('#mymodal').on('shown.bs.modal', function() {
      $('#myinput').focus();
    })
  });
});
  • Это "#button", который вызывает модальную форму,

  • "# mymodal" - модальная форма,

  • "# myinput" - это вход, который вы хотите получить.