我加载了一个动态引导模式,它包含很少的文本输入。我面临的问题是我希望光标专注于此模式中的第一个输入,默认情况下不会发生这种情况。
所以我写了这段代码来做到这一点:
$('#modalContainer').on('show', function () {
$('input:text:visible:first').focus();
});
但是现在它专注于输入一会儿然后自动消失,为什么会发生这种情况以及如何解决?
我加载了一个动态引导模式,它包含很少的文本输入。我面临的问题是我希望光标专注于此模式中的第一个输入,默认情况下不会发生这种情况。
所以我写了这段代码来做到这一点:
$('#modalContainer').on('show', function () {
$('input:text:visible:first').focus();
});
但是现在它专注于输入一会儿然后自动消失,为什么会发生这种情况以及如何解决?
@scumah 为您提供答案:Twitter bootstrap - 点击时关注模态框内的 textarea
对于引导程序 2
modal.$el.on('shown', function () {
$('input:text:visible:first', this).focus();
});
更新:对于引导程序 3
$('#myModal').on('shown.bs.modal', function () {
$('#textareaID').focus();
})
========== 更新 ======
在回答一个问题时,如果您指定不同的数据目标,您可以在同一页面上将其与多个模式一起使用,重命名您的模式 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>
JS
$('#myModal1').on('shown.bs.modal', function() {
$('#textareaID1').focus();
})
我找到了最好的方法来做到这一点,没有 jQuery。
<input value="" autofocus>
完美运行。
这是一个 html5 属性。所有主流浏览器都支持。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input
David Taiaroa 的答案是正确的,但不起作用,因为“淡入”模态的时间不允许您将重点放在输入上。您需要创建一个延迟:
$('#myModal').on('shown.bs.modal', function () {
...
setTimeout(function (){
$('#textareaID').focus();
}, 1000);
})
通常的代码(如下)对我不起作用:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').focus()
})
我找到了解决方案:
$('body').on('shown.bs.modal', '#myModal', function () {
$('input:visible:enabled:first', this).focus();
})
我得到那个引导程序在他们的页面上添加了以下信息:
由于 HTML5 定义其语义的方式,autofocus HTML 属性在 Bootstrap 模式中无效。要达到相同的效果,请使用一些自定义 JavaScript:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').focus()
})
这是最适合您的简单代码,适用于所有具有任何输入字段且具有焦点的弹出窗口
$(".modal").on('shown.bs.modal', function () {
$(this).find("input:visible:first").focus();
});
我认为最正确的答案,假设使用 jQuery,是这个页面中所有答案的方面的合并,加上 Bootstrap 传递的事件的使用:
$(document).on('shown.bs.modal', function(e) {
$('input:visible:enabled:first', e.target).focus();
});
它也可以更改$(document)
为$('.modal')
或向模式中添加一个类,以指示应该发生此焦点,例如$('.modal.focus-on-first-input')
试试这个代码,它可能对你有用
$(this).find('input:text')[0].focus();
第一步,您必须autofocus
在表单输入中设置属性。
<input name="full_name" autofocus/>
然后您必须添加声明以在显示模式后设置输入的自动对焦。
试试这个代码:
$(document).on('ready', function(){
// Set modal form input to autofocus when autofocus attribute is set
$('.modal').on('shown.bs.modal', function () {
$(this).find($.attr('autofocus')).focus();
});
});
如果您正在寻找适用于所有模式的片段,并在打开的模式中自动搜索第一个输入文本,您应该使用这个:
$('.modal').on('shown.bs.modal', function () {
$(this).find( 'input:visible:first').focus();
});
如果您的模式是使用 ajax 加载的,请改用:
$(document).on('shown.bs.modal', '.modal', function() {
$(this).find('input:visible:first').focus();
});
使用 Bootstrap 4: 1/ 删除<div class="modal fade" 处的“fade”类... 2/ 下一步(https://getbootstrap.com/docs/4.6/components/modal/)
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').trigger('focus')
})
如果您没有删除“淡入淡出”类,则输入将集中,但键盘不会显示在 iOS 上的 Safari 中
使用自动对焦搜索正确的表单元素:
$('.modal').on('shown.bs.modal', function() {
$(this).find('[autofocus]').focus();
});
如果您只想自动聚焦任何打开的模式,您可以在您的模式或库函数中放入此片段,该片段将专注于第一个输入:
$('.modal').on('shown.bs.modal', function () {
$(this).find('input:first').focus();
})
这是最通用的解决方案
$('body').on('shown.bs.modal', '.modal', function () {
$(this).find(":input:not(:button):visible:enabled:not([readonly]):first").focus();
});
当您的输入/文本框打开时,尝试删除 modal 的 tabIndex 属性。当您关闭输入/文本框时,将其设置回原来的状态。这将解决问题,无论引导程序版本如何,并且不会影响用户体验流程。
根据 Bootstrap 4 文档:
由于 HTML5 定义其语义的方式,autofocus HTML 属性在 Bootstrap 模式中无效。要达到相同的效果,请使用一些自定义 JavaScript。
例如:
$('#idOfMyModal').on('shown.bs.modal', function () {
$('input:first').trigger('focus')
});
链接。