Twitter bootstrap-фокус на textarea внутри модального по клику
только начинаю играть с bootstrap, и это удивительно.
Я пытаюсь понять это. У меня есть текстовая область для обратной связи внутри модального окна. Он отлично работает. Но я хочу, чтобы фокус пошел на текстовую область, когда вы нажимаете на кнопку, чтобы активировать модальный. И я не могу заставить его работать.
вот скрипка:http://jsfiddle.net/denislexic/5JN9A/4/
вот код:
<a class="btn testBtn" data-toggle="modal" href="#myModal" >Launch Modal</a>
<div class="modal hide" id="myModal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>Modal header</h3>
</div>
<div class="modal-body">
<textarea id="textareaID"></textarea>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<a href="#" class="btn btn-primary">Save changes</a>
</div>
</div>
здесь JS
$('.testBtn').on('click',function(){
$('#textareaID').focus();
});
возобновить
Когда я нажимаю на кнопку "Запустить модальный", я хочу, чтобы модальный появился и фокус пошел на текстовую область.
Спасибо за любую помощь.
13 ответов:
Это не работает, потому что при нажатии на кнопку модальный еще не загружен. Вам нужно подключить фокус к событию и перейти к страница модалов bootstrap мы видим событие
shown, чтоis fired when the modal has been made visible to the user (will wait for css transitions to complete). И это именно то, что мы хотим.попробуйте это:
$('#myModal').on('shown', function () { $('#textareaID').focus(); }) вот ваша скрипка обновлена:http://jsfiddle.net/5JN9A/5/
обновление:
как @MrDBA Примечания, in Bootstrap 3 имя события изменить до
shown.bs.modal. Итак, для Bootstrap 3 Используйте:$('#myModal').on('shown.bs.modal', function () { $('#textareaID').focus(); })новая скрипка для Bootstrap 3: http://jsfiddle.net/WV5e7/
Я хотел иметь декларативную версию этого, поэтому я пошел со следующим :
$(document).ready(function() { $(".modal").on('shown.bs.modal', function () { $("[data-modalfocus]", this).focus(); }); });затем вы можете просто добавить свойство data-modalfocus в свое поле, например:
<input type="text" data-modalfocus />и когда модальные всплывающие окна, ваше поле получит фокус.
Bootstrap3
$(window.document).on('shown.bs.modal', '.modal', function() { window.setTimeout(function() { $('[autofocus]', this).focus(); }.bind(this), 100); });Bootstrap 2
$(window.document).on('shown', '.modal', function() { window.setTimeout(function() { $('[autofocus]', this).focus(); }.bind(this), 100); });
можно использовать
autofocushtml элемент для установки автофокуса.<textarea id="textareaID" autofocus="" ></textarea>
Если ваш модальный имеет свойство 'fade':
это будет работать, но вам, возможно, придется настроить продолжительность таймаута и, очевидно, идентификаторы, где это необходимо:
$("#ID-of-modal").on('show', function(event){ window.setTimeout(function(){ $(event.currentTarget).find('input#ID-of-input').first().focus() }, 0175); });
У меня были серьезные проблемы в chrome... Надеюсь, это кому-то поможет.
//When user clicks link $('#login-modal-link').on('click',function() { setTimeout(function(){ //If modal has class if ($('#login-modal').hasClass('modal')) { //Whatever input you want to focus in $('#user_login_modal').focus(); } },100); });
Как уже упоминалось в одном из комментариев Вы должны удалить
fadeиз модала. Так что это работает для меня:<div id="myModal" class="modal"> ... <textarea class="form-control" rows="5" id="note"></textarea> </div> <script> $('#myModal').on('shown.bs.modal', function () { $('#note').focus(); }) </script>
Я хотел что-то более общее
$(window.document).on('shown.bs.modal', '.modal', function () { var timer = window.setTimeout(function () { $('.firstInput', this).focus(); typeof timer !== 'undefined' && window.clearTimeout(timer); }.bind(this), 100); });С этим я даю любой контроль, который я хочу, чтобы класс CSS firstInput. Существует небольшая задержка в настройке фокуса, что дает ему определенное чутье.
Я не знаю, почему, но выбрал решение не работает для меня.. Вместо этого я использую следующий фрагмент кода:
$('#annul-modal').on('show', function() { setTimeout(function() {$('textarea:first', '#annul-form').focus();}, 400); });Я знаю, что это не так красиво, но по крайней мере он работает.. Bootstrap v2.3. 0
Если вы используете bootstrap v3 и используете как модальный диалог, так и текстовый редактор wysihtml5, следующие работы (предполагая, что #basic-это идентификатор вашей модальной формы):
$('#basic').on('shown.bs.modal', function () { editor.composer.element.focus() })
прикрепление события непосредственно к модальному экрану не сработало для меня. Я использую этот код:
$('body').on('shown.bs.modal', '.modal', function () { $('[id$=myField]').focus(); })С помощью этого кода мне нужно только изменить myField для идентификатора элемента управления я хочу иметь фокус, он также позволяет мне определить фокус для нескольких модальных экранов, у меня есть что-то вроде:
$('body').on('shown.bs.modal', '.modal', function () { $('[id$=YesCancel]').focus(); $('[id$=YesInverted]').focus(); $('[id$=cancelAddCustomer]').focus(); $('[id$=closeHistoryModal]').focus(); });Источник http://xcellerant.net/2014/08/06/set-focus-on-a-field-when-showing-a-bootstrap-3-modal/
нашли делаю:
$(document).on('shown.bs.modal', function () { $(this).find('.form-control:visible:first').focus(); });работал хорошо, так как он просто находит первый элемент управления формой, а не нуждается в определенном идентификаторе и т. д. Будьте именно тем, что нужно большую часть времени.
<a href="" id="btnmoverCategoriaRaiz">Mover para a raiz...</a> <script> $(function(){ $("#btnmoverCategoriaRaiz").click(function(){ $("#novoPlaylist").modal(); return false; }); }); </script> <div id="novoPlaylist" class= "modal hide"> <div class="modal-header"> <h3>Novo Playlist</h3> </div> <div class="modal-body"> <form class="form-horizontal"> <?echo $form->input("Playlist.nome", array("label"=>"Nome:")) ?> </form> </div> <div class="modal-footer"> <a href="javascript:;" class="btn" data-dismiss="modal">Cancelar</a> <a href="javascript:;" class="btn btn-primary" id="SalvarNomePlaylist" data-loading-text="Aplicando..."> Savar</a> </div> </div>
Comments