2015-12-09 116 views
1

我的目标是在弹出窗口中打开一个input元素并集中该输入。奇怪的焦点()行为

因此在逻辑上,我试过$('#input').focus()$('#input').first().focus()$('#input')[0].focus(),但它们不起作用;但是当我更改标签并返回到我的标签时,input元素处于焦点。有人看过类似的东西吗?或知道如何解释这个,甚至更好,知道如何解决这个问题...

P.S.对于评论:是的,它是我的网页上唯一的id为“输入”的输入,是的,我的页面上有一个ID为“input”的input元素,是的,在添加input后调用了调焦元素代码到了最后。

+1

从某些其他事件处理程序(如切换选项卡的某些内容)调用'.focus()'可能会出现问题。根据我的经验,您可以通过将焦点调用包装在超时处理程序中来解决它,并且超时时间很短。而'$(“#input”)。focus()'是你所需要的(在超时处理程序中)。 – Pointy

+0

P.P.S:不,你没有提供任何MCVE :)但我想波蒂是正确的。还有一件事,隐藏的元素不能集中,也许这是更相关的,然后集中它一旦显示 –

+1

另请参见[为什么setTimeout(FN,0)有时有用?](http://stackoverflow.com/questions/779379/why -is-settimeoutfn-0-sometimes-useful) –

回答

0

从我上面的评论,这里就是我的建议:

setTimeout(function() { 
    $("#input").focus(); 
}, 0); 

这种安排可以让当前事件线程完成,包括浏览器要执行任何“原生”的行动。然后超时可以在页面状态的唯一改变将设置焦点的上下文中运行。

1
window.load = function(){$("#input").focus();} 

基本上window.load是当页面的所有元素被加载仅触发该事件。

您可以在任何地方的页面内添加上述代码。最好在<script type="javascript"> </script>.以内的页面的最后加载所有元素后,它将焦点设置到输入字段。

+1

随着解释一个很好的答案变得有用回答。 – wmk

+0

基本上,windows.load是当页面的所有元素都被加载时才会触发的事件。 您可以在任何地方的页面内添加上述代码。最好在JavaScript脚本的最后一页。因此,加载所有元素后,它会将焦点设置为输入字段。 –

+0

我使用“编辑”功能将您的评论添加到答案中。感谢您的解释! – wmk