HTML解析期间的范围更改

时间:2016-07-10 22:10:52

标签: html dom scope

如果您使用HTML创建表单,请执行以下操作:

<!DOCTYPE html>
<html><head>
<script>
function submit() {
    console.log("window.submit");
}
</script>
</head>
<body>
<form name="form">
    <input type="button" value="button" onclick="submit()" />
</form>
</body>
</html>

当解析input标签时(至少在chrome中),显然会以表单作为范围创建相应的DOM元素,这样绑定到onclick处理程序的函数将是{{1}而不是form.submit()。这种标准行为或浏览器是否依赖?有没有涵盖这个的文件?

1 个答案:

答案 0 :(得分:1)

WHATWG HTML Standard在事件处理程序属性中定义它 https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-attributes

  

范围

    - If H is an element's event handler, then let Scope 
    be NewObjectEnvironment(document, the global environment).
    - Otherwise, H is a Window object's event handler: let Scope be the global environment.
    - If form owner is not null, let Scope be NewObjectEnvironment(form owner, Scope).
    - If element is not null, let Scope be NewObjectEnvironment(element, Scope).

在这种情况下,由于表单所有者不为null,因此表单的每个属性都在范围内。 “submit”是表单的属性,因此“submit()”将调用form.submit()。