我有来自示例的以下模态形式:
<!-- Button to trigger modal -->
<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a>
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Modal header</h3>
</div>
<div class="modal-body">
Enter something: <input type="text" id="myInput">
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary">Save changes</button>
</div>
</div>
我希望我的输入字段在显示模态后聚焦。
我已经尝试过自动对焦和在$('modal').shown()
事件上设置字段焦点。它有点聚焦字段(我有另一个事件,当字段聚焦时显示标签)但实际上字段没有聚焦,我必须TAB
再次按下聚焦它。我也尝试过这样的事情:
$(".modal").on('shown', function() {
$(this).find("[autofocus]:first").focus();
});
并为我的领域设置autofocus:"autofocus"
属性。它产生了相同的效果。
当 modal 只是一个普通的 div 时,我尝试的一切都适用,它专注于页面加载。但是当模态由按钮触发时 - 没有任何作用(当然我也改变了逻辑,当模态只是一个普通的 div 时,我可以将其集中在加载上,当我通过按钮触发时,我会考虑它并尝试相应地解决它)。
我想要的只是在加载模式后关注的字段,以便它具有闪烁的光标并且用户可以开始输入。
唯一有效的是更改 bootstrap.js 本身,我已经$("#myInput").focus()
在 bootstrap.js 模态部分中放置了某个地方,但是我忘记了它在哪里,第二 - 我认为更改 bootstrap.js API 不好,必须更容易和更优雅的解决方案。请给我建议,谢谢xD
更新:
首先,感谢您的帮助!多亏了你,我发现我遇到的问题是 Rails 问题。
这是我所做的:
1)。rails generate controller home index
2)。app/views/home/index.html和app/assets/javascript/something.js就像 robertklep 提供的这个jsFiddle :http : //jsfiddle.net/JCaFp/
4)。jquery-1.9.1.js和bootstrap.js位于app/assets/javascript/中(两者都是从网站上更新的,没有任何变化)
5)。app/views/layouts/application.html.erb - 我猜这个文件是我们解决方案的关键:
<!DOCTYPE html>
<html>
<head>
<title>Udc</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
还是不行。所有 js 文件都包含在内,但是当我在浏览器中打开我的模式时 - 输入会暂时获得焦点,然后再次失去焦点。
我也试过这个:
<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "bootstrap" %>
<%= javascript_include_tag "somehow" %>
还是一样的东西。
建议?:)
更新:
解决了!
将我的更改somehow.js
为
$(document).ready(function() {
$(".modal").on('shown', function() {
$(this).find("[autofocus]:first").focus();
});
});
和application.html.erb
样式表:
<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "bootstrap" %>
<%= javascript_include_tag "somehow" %>
它按预期工作。再次感谢!