如何在显示后将焦点设置为引导模式中的第一个文本输入

Amr*_*rhy 104 jquery twitter-bootstrap

我加载了一个动态引导模式,它包含很少的文本输入.我面临的问题是我希望光标专注于此模式中的第一个输入,默认情况下不会发生这种情况.
所以我写了这段代码来做到这一点:

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

但现在它专注于输入片刻然后自动消失,为什么会发生这种情况以及如何解决?

Dav*_*roa 167

@scumah有你的答案:Twitter bootstrap - 专注于点击模式内的textarea

对于Bootstrap 2

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

更新:对于Bootstrap 3

$('#myModal').on('shown.bs.modal', function () {
    $('#textareaID').focus();
})  
Run Code Online (Sandbox Code Playgroud)

==========更新======

在回答问题时,如果指定了不同的数据目标,可以在同一页面上使用多个模态,重命名模态ID以匹配并更新表单输入字段的ID,最后更新JS以匹配这些新的ID:
请参阅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>
Run Code Online (Sandbox Code Playgroud)

JS

$('#myModal1').on('shown.bs.modal', function() {
  $('#textareaID1').focus();
})
Run Code Online (Sandbox Code Playgroud)


tim*_*ois 77

没有jQuery,我找到了最好的方法.

<input value="" autofocus>
Run Code Online (Sandbox Code Playgroud)

工作得很好.

这是一个html5属性.所有主流浏览器均支持.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input

  • 它对我没有用...在显示bootstrap模态后,输入失去了焦点 (13认同)
  • 如果你从模态中删除`tabdindex =" - 1"`,这是有效的,但它只能工作一次.关闭和重新开放并不重点关注. (7认同)
  • 以下是如何在 MVC3 控件上执行此操作:`@Html.TextBoxFor(m =&gt; m.UserName, new { @autofocus="" })` (2认同)
  • 在引导模式文档中,模式不支持此功能,但它可以用于其他形式。由于 HTML5 定义其语义的方式,autofocus HTML 属性在 Bootstrap 模式中不起作用。要达到相同的效果,请使用一些自定义 JavaScript: $('#myModal').on('shown.bs.modal', function () { $('#myInput').trigger('focus') }) (2认同)

Mar*_*uim 34

David Taiaroa的答案是正确的,但是不起作用,因为"淡入"模态的时间不会让你把注意力集中在输入上.你需要创建一个延迟:

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

})
Run Code Online (Sandbox Code Playgroud)

  • 你是这里唯一的.您的解决方案是唯一有效的解决方案.我试图为timeOut设置一个较小的值但是没有用.似乎模态"完成加载"在1000毫秒:( (2认同)
  • 正确的是使用shown.bs.modal事件:http://getbootstrap.com/javascript/#modals-events (2认同)
  • 您可以使用延迟(),而不是使用setTimeout(),如下所示... $('#textareaID').延迟(1000).focus().select(); (2认同)

Éde*_*hta 15

通常的代码(见下文)为我工作:

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})
Run Code Online (Sandbox Code Playgroud)

我找到了解决方案:

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

在这里看到更多


Amr*_*rhy 8

我得到了bootstrap在他们的页面上添加了以下信息:

由于HTML5如何定义其语义,自动聚焦HTML属性对Bootstrap模式没有影响.要达到相同的效果,请使用一些自定义JavaScript:

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})
Run Code Online (Sandbox Code Playgroud)

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


Jun*_*war 5

这是简单的代码,它将最适合所有具有任何输入字段且将其集中的弹出窗口

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