在 JavaScript 中,如果作为子窗口调用,则使用 focus() 设置文本区域将不起作用

问题描述 投票:0回答:2

我有一个简单的测试页面,它将焦点设置到 oninit 函数上的文本区域。但是,如果该页面作为子页面调用,则确切的代码将无法执行此操作。

放入alert框证明oninit函数被调用但未能将焦点置于文本框中。按下重新加载后,焦点就会正确。

因此,鉴于我的代码在主页上调用时可以完美运行,并且如果调用重新加载,也可以在子页面中运行,那么为什么它第一次不起作用?

<html>
<body onload="init()">
<script type="text/javascript">
function init()
{
    document.getElementById("message").focus();
}

</script>
<textarea id="message" rows=10 cols=40></textarea>
</body>
</html>

这里没有什么聪明的地方,只是如果页面是通过 window.open("test2.html"); 加载的,则不起作用

javascript setfocus
2个回答
18
投票

无论事件如何,您都可以使用 setTimeout。

setTimeout(function() {
    document.getElementById("elementId").focus();
}, 0);

8
投票

您使用哪种浏览器? 我检查了 Firefox、Chrome 和 IE。 您的代码运行完美并专注于文本区域。

我在同一目录中创建两个文件 test1.html 和 test2.html 。 在 test1.html 中我插入以下代码..

<html>
<body>
<script type="text/javascript">
function init()
{
    window.open('test2.html');
}

</script>
<button onclick="init()">test</button>
</body>
</html>

在 test2.html 中..

<html>
<body onload="init()">
<script type="text/javascript">
function init()
{
    document.getElementById("message").focus();
}

</script>
<textarea id="message" rows=10 cols=40></textarea>
</body>
</html>

然后,我运行 test1.html 并单击按钮,然后 test2.html 出现,焦点位于文本区域。

© www.soinside.com 2019 - 2024. All rights reserved.