如果您使用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()
。这种标准行为或浏览器是否依赖?有没有涵盖这个的文件?
答案 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()。