Twitter引导 – 关注单击模式内的textarea
刚开始玩引导,这是惊人的。
我试图弄清楚这一点。 我有一个模态窗口内的反馈textarea。 它工作很好。 但是当我点击button来激活模态时,我想把焦点放在textarea上。 而我似乎无法得到它的工作。
这是一个小提琴: 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(); });
恢复当我点击“启动模式”,我希望模态显示和焦点去textarea。
谢谢你的帮助。
它不起作用,因为当你点击button模式尚未加载。 你需要把焦点挂到一个事件上,然后进入引导程序的模态页面,我们看到显示的事件, is fired when the modal has been made visible to the user (will wait for css transitions to complete)
, 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所指出的那样,在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 />
而当模式popup时,你的领域将变得焦点。
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); });
您可以使用autofocus
html元素来设置自动对焦。
<textarea id="textareaID" autofocus="" ></textarea>
小提琴在这里(点击)
如果你的模态具有“淡入”属性:
这将工作,但您可能需要调整超时的时间,显然是需要的ID:
$("#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的任何控制。 设定焦点有一点点延迟,使其具有一定的天赋。
我不知道为什么,但select的解决scheme不适合我..我使用下面的代码片段:
$('#annul-modal').on('show', function() { setTimeout(function() {$('textarea:first', '#annul-form').focus();}, 400); });
我知道这不是很漂亮,但至less它工作.. Bootstrap v2.3.0
如果你正在使用bootstrap v3,并且你正在使用modal dialog和wysihtml5文本编辑器,下面的工作(假设#basic是你的模态forms的ID):
$('#basic').on('shown.bs.modal', function () { editor.composer.element.focus() })
直接将事件附加到模态屏幕对我来说不起作用。 我正在使用这个代码:
$('body').on('shown.bs.modal', '.modal', function () { $('[id$=myField]').focus(); })
有了这个代码,我只需要改变myField为控制的id我想要的焦点,它也允许我定义多个模态屏幕的焦点,我有这样的事情:
$('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(); });
工作得很好,因为它只是find了第一个forms控制,而不是需要一个特定的ID等。只是大部分时间需要。
<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>