Я видел пару вопросов относительно модов начальной загрузки, но ни один из них точно не такой, так что я продолжу.
У меня есть модал, который я называю onclick, так что ...
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
});
Это прекрасно работает, но когда я показываю модальный режим, я хочу сосредоточиться на первом элементе ввода ... В этом случае первый элемент ввода имеет идентификатор #photo_name.
Так я попробовал
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
$("input#photo_name").focus();
});
Но это было безрезультатно. Наконец, я попытался привязаться к событию 'show', но даже в этом случае ввод не будет фокусироваться. И наконец, просто для тестирования, так как у меня было подозрение, что это касается порядка загрузки js, я вставил setTimeout просто чтобы посмотреть, задержу ли я секунду, сработает ли фокус, и да, это работает! Но этот метод явно дерьмо. Есть ли способ получить такой же эффект, как показано ниже, без использования setTimeout?
$("#modal-content").on('show', function(event){
window.setTimeout(function(){
$(event.currentTarget).find('input#photo_name').first().focus()
}, 0500);
});
Просто хотел сказать, что Bootstrap 3 справляется с этим немного по-другому. Имя события - «показано.bs.modal».
или поместите фокус на первый видимый ввод, как это:
http://getbootstrap.com/javascript/#modals
источник
Я использую это в моем макете, чтобы захватить все модальные и сосредоточиться на первом входе
источник
$(this).find('input:visible').focus();
У меня была такая же проблема с начальной загрузкой 3, фокусировался, когда я нажимал на ссылку, а не когда запускал событие с помощью javascript. Решение:
Наверное, это что-то про анимацию!
источник
У меня была проблема, чтобы поймать событие "show.bs.modal" .. И это мое решение, которое прекрасно работает ..
Вместо простого on ():
Используйте on () с делегированным элементом:
источник
Кажется, это потому, что модальная анимация включена (
fade
в классе диалога), после вызова.modal('show')
диалог не сразу виден, поэтому он не может получить фокус в это время.Я могу придумать два способа решения этой проблемы:
fade
из класса, чтобы диалоговое окно было сразу видно после вызова.modal('show')
. Вы можете посмотреть http://codebins.com/bin/4ldqp7x/4 для демонстрации. (Извините @keyur, я по ошибке отредактировал и сохранил как новую версию вашего примера)focus()
вshown
случае, как то, что написал @keyur.источник
Я создал динамический способ вызывать каждое событие автоматически. Идеально сфокусировать поле, потому что оно вызывает событие только один раз, удаляя его после использования.
Вам просто нужно позвонить
modalEvents()
на документ готов.Использование:
Таким образом, вы можете использовать один и тот же модал для загрузки того, что вы хотите, не беспокоясь об удалении событий каждый раз.
источник
У меня была такая же проблема с начальной загрузкой 3, и я решил так:
источник
Bootstrap добавил загруженное событие.
https://getbootstrap.com/docs/3.3/javascript/#modals
захватить событие «loaded.bs.modal »на модальном
источник
Bootstrap модальное шоу событие
})
источник
Немного чище и более модульное решение может быть:
Или вместо этого используйте свой идентификатор:
Надеюсь, это поможет..
источник