我想创建一个表单,我想自动将焦点放在字段上。在过去,我学会了总是等待任何DOM操作,直到window.onload被触发,因为DOM可能没有准备好。自从JQuery以来,DOMContentReady事件已经变得很有名,它在(在兼容的浏览器中)比window.onload更早出现。
在显示字段的时刻与获得焦点的时刻(通过在window.onload中使用document.getElementById(“inputfield”)。focus()或触发DOMContentReady之后)仍会产生延迟。为了尽量减少延迟,有些人建议在页面中的元素之后直接使用focus(),例如:
<form name="f">
<input id="q" autofocus>
<script>
if (!("autofocus" in document.createElement("input"))) {
document.getElementById("q").focus();
}
</script>
<input type="submit" value="Go">
</form>
(来自Dive Into HTML5的例子)
此外,Google Closure团队建议采用以下做法:“the preferred way is to use inline scripts as soon as possible”,与another answer on SO州一样。
我不想辩论这是不是坏习惯(一般来说,我同意内容和行为应该分开的意见,最好是在单独的文件中)。我的问题是:这可能有害吗?例如,在某些浏览器中导致错误消息,因为该字段可能仍未正确呈现(并且不要忘记移动浏览器)。任何建议都表示赞赏。
答案 0 :(得分:3)
不,它没有害处,它是(主观)最佳方式。
这是最好的原因:
糟糕的原因:
<script>
标记答案 1 :(得分:3)
说实话,我想如果你看到弹出的页面和获得焦点的元素之间出现延迟,那么这确实表明你的页面可能太大了,所以减少那个就是你的第一个停靠港。我知道如果我看到这样的内联代码,我会非常不高兴。正如约什所说,这将成为可维护性的噩梦。
但是,关于它有害的问题,我想如果浏览器已经处理了脚本节点来运行javascript,那么它也会处理输入节点,所以它应该可用于代码。因此我不希望出现错误。