刚刚开始玩bootstrap,这太棒了。
我想弄明白这一点。我有一个textarea在模态窗口内反馈。它很棒。但是当我点击按钮激活模态时,我希望焦点转到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上。
感谢您的帮助。
答案 0 :(得分:202)
它不起作用,因为当您单击按钮时尚未加载模态。您需要将焦点挂钩到一个事件,然后转到bootstrap's modals page我们看到事件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所述,在Bootstrap 3中,事件名称为changed到shown.bs.modal
。因此,对于Bootstrap 3使用:
$('#myModal').on('shown.bs.modal', function () {
$('#textareaID').focus();
})
Bootstrap 3的新小提琴:http://jsfiddle.net/WV5e7/
答案 1 :(得分:21)
我想要一个声明版本,所以我选择了以下内容:
$(document).ready(function() {
$(".modal").on('shown.bs.modal', function () {
$("[data-modalfocus]", this).focus();
});
});
然后,您可以简单地向您的字段添加data-modalfocus属性,如下所示:
<input type="text" data-modalfocus />
当模态弹出时,你的领域将获得焦点。
答案 2 :(得分:11)
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);
});
答案 3 :(得分:4)
您可以使用autofocus
html元素设置自动对焦。
<textarea id="textareaID" autofocus="" ></textarea>
答案 4 :(得分:1)
这样可行,但您可能需要调整超时的持续时间,显然需要调整ID:
$("#ID-of-modal").on('show', function(event){
window.setTimeout(function(){
$(event.currentTarget).find('input#ID-of-input').first().focus()
}, 0175);
});
答案 5 :(得分:1)
我在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);
});
答案 6 :(得分:1)
正如其中一条评论所述,您需要从模式中删除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>
答案 7 :(得分:1)
我想要一些更通用的东西
$(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的任何控件。 设置焦点略有延迟,使其具有一定的风格。
答案 8 :(得分:0)
我不知道为什么,但选择的解决方案对我不起作用.. 我改为使用以下代码片段:
$('#annul-modal').on('show', function() {
setTimeout(function() {$('textarea:first', '#annul-form').focus();}, 400);
});
我知道它不是那么漂亮,但至少它起作用.. Bootstrap v2.3.0
答案 9 :(得分:0)
如果您使用的是bootstrap v3,并且您正在使用模态对话框和wysihtml5文本编辑器,则以下工作(假设#basic是您的模态表单的ID):
$('#basic').on('shown.bs.modal', function () {
editor.composer.element.focus()
})
答案 10 :(得分:0)
将事件直接附加到模态屏幕对我来说不起作用。我正在使用此代码:
$('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/
答案 11 :(得分:0)
发现:
$(document).on('shown.bs.modal', function () {
$(this).find('.form-control:visible:first').focus();
});
工作得很好,因为它只是找到第一个表单控件而不是需要特定的ID等。大多数时候都需要。
答案 12 :(得分:-1)
<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>