$('#id').focus()
应该使输入集中(活动)。我似乎无法正常工作。
即使在此站点上的控制台中,我也在尝试将其用于搜索框
$('input[name="q"]').focus()
我什么也没得到。有任何想法吗?
$('#id').focus()
应该使输入集中(活动)。我似乎无法正常工作。
即使在此站点上的控制台中,我也在尝试将其用于搜索框
$('input[name="q"]').focus()
我什么也没得到。有任何想法吗?
Answers:
实际上,只要您不关注控制台,您给出的专注于此站点的示例就可以正常工作。不起作用的原因仅仅是因为它没有从开发控制台中窃取焦点。如果您在控制台中运行以下代码,然后在浏览器窗口中快速单击,则将其聚焦在搜索框中:
setTimeout(function() { $('input[name="q"]').focus() }, 3000);
至于您的另一个,过去给我带来麻烦的一件事是事件的顺序。您不能在尚未附加到DOM的元素上调用focus()。您要关注的元素是否已附加到DOM?
setTimeout解决操作中的问题才能使得它在patooty保持了巨大的痛苦。如果出现错误,则很难调试。无论您将元素插入DOM的何处,都应该在其中调用.focus()。
在网上其他地方找到了解决方案...
$('#id').focus();
不工作。
$('#id').get(0).focus();
做过。
这里的一些答案建议setTimeout用来延迟关注目标元素的过程。其中一位提到目标位于模态对话框中。在setTimeout不知道使用该解决方案的具体细节的情况下,我无法进一步评论该解决方案的正确性。但是,我想我应该在这里提供一个答案,以帮助那些像我一样遇到此线程的人
问题的简单事实是,您不能专注于尚不可见的元素。如果遇到此问题,请确保在尝试聚焦目标时实际上是可见的。就我自己而言,我正在按照这些思路做一些事情
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
这没有用。当我从确实起作用的控制台执行$('#elementid')。focus()`时,我才意识到发生了什么。区别-在我的目标上方的代码中,无法确定目标实际上是可见的,因为动画可能不完整。线索就在那里
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
符合预期。我最初也提出了setTimeout解决方案,它也起作用。但是,根据主机设备确保目标元素可见的过程的速度,任意选择的超时必定会早晚打破解决方案。
visibility:hidden-它不会变得关注。
以防万一其他人偶然发现这个问题并遇到与我相同的情况-单击其他元素后我试图设置焦点,但焦点似乎没有起作用。原来我只需要一个e.preventDefault();-这是一个示例:
$('#recipients ul li').mousedown(function(e) {
// add recipient to list
...
// focus back onto the input
$('#message_recipient_input').focus();
// prevent the focus from leaving
e.preventDefault();
});
这有助于:
如果从mousedown事件处理程序中调用HTMLElement.focus(),则必须调用event.preventDefault()来防止焦点离开HTMLElement。来源:https://developer.mozilla.org/en/docs/Web/API/HTMLElement/focus
我知道这很旧,但今天却遇到了。没有一个答案对我有用,我发现确实有用的是setTimeout。我希望使用setTimeout可以将焦点放在模式的输入字段上。希望这可以帮助!
setTimeout是一个不好的解决方案。您不能保证在用户计算机上执行的时间,因此,与时间有关的内容非常脆弱。
我也有这个问题。就我而言,有效的解决方案是在HTML元素上使用tabindex属性。
我正在使用ng-repeat列表中的某些li元素,但无法使用.focus()将焦点移到第一个li上,因此我只是在循环期间向每个li添加了tabindex属性。
所以现在 <li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>
+1是从0开始的索引。另外,在调用.focus()函数之前,请确保DOM中存在该元素。
我希望这有帮助。
对于那些因为使用“ $(element).show()”而无法工作的问题。我以另一种方式解决了它:
var textbox = $("#otherOption");
textbox.show("fast", function () {
textbox[0].focus();
});
因此,您不需要计时器,它将在show方法完成后执行。
slideDown(),fadeIn()等等。
其他解决方案遇到了一个同样的问题,其中focus()似乎不起作用,但最终发现所需的是滚动到正确的位置:
就我而言,我必须指定一个标签索引(-1如果只能通过脚本进行聚焦)
<div tabindex='-1'>
<!-- ... -->
</div>