设置';自动对焦&x27;JavaScript不起作用的属性

设置';自动对焦&x27;JavaScript不起作用的属性,javascript,html,Javascript,Html,我正在编写一个小插件,该插件将封装自动聚焦设置,但当我使用JavaScript动态添加属性时,它不会自动聚焦页面,这很奇怪。这有什么关系吗 HTML: 不这样做: document.querySelector('input').setAttribute('autofocus', 'autofocus').focus(); jsiddle:试试这样的方法 document.querySelector('input').focus() <input type="text" autofocu

我正在编写一个小插件,该插件将封装自动聚焦设置,但当我使用JavaScript动态添加属性时,它不会自动聚焦页面,这很奇怪。这有什么关系吗

HTML:

不这样做:

document.querySelector('input').setAttribute('autofocus', 'autofocus').focus();

jsiddle:

试试这样的方法

document.querySelector('input').focus()
<input type="text" autofocus>
编辑

如果你想要HTML5标准,你应该让HTML看起来像这样

document.querySelector('input').focus()
<input type="text" autofocus>


尝试在输入元素之后立即添加javascript代码,以便在页面加载完成之前执行。在您的情况下,
autofocus
属性设置为元素,但通过浏览器对具有
autofocus
的元素进行聚焦已经完成。因此,您可以在浏览器设置焦点后设置值。当浏览器试图设置它时,不存在任何属性。试试下面的代码

<input type="text">
<script>
    document.querySelector('input').setAttribute('autofocus', 'autofocus');
</script>

document.querySelector('input').setAttribute('autofocus','autofocus');


如果您需要在单击按钮或其他操作时执行此操作,则需要在JavaScript中执行此操作。设置属性并不意味着浏览器将随时执行它。

最好的方法似乎是:

document.querySelector('input').autofocus = true;
这篇文章可能有助于解释为什么要使用反射属性:


但是,似乎需要在文档加载附近应用它。否则它似乎不会开火。我想这是因为这里()定义了页面一加载就可以工作。我还没有看到任何其他的东西说它可以在以后调用。每次我试着稍后用3秒的setTimeout启动它时,它都不会聚焦字段。

为什么不呢。focus()?因为这不是HTML5,而是使用JavaScript来模拟它。存在设置属性的问题,即在HTML呈现时将其本机设置在那里。