当表单的提交按钮被点击时,我试图调用JavaScript函数
由于某些原因,当函数被命名为'submit'时,它不会被调用,但是当它被命名为其他名字时,它会工作。
我还应该注意到,当按钮从表单标记中取出时,该函数也可以工作。
谁能解释为什么当它是内部的形式,它不与该名称工作?
代码如下:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function submit(){
console.log('test');
}
</script>
</head>
<body>
<form>
<input type="text"/>
<input type="submit" onclick="submit()"/>
</form>
</body>
</html>
因为submit()
是核心JS中提交表单的保留函数。
例如,如果你的表单有一个像myform
这样的id,你可以这样做,通过JS提交它:
document.form['myform'].submit();
调用那个函数实际上是提交表单而不是调用自定义函数
EDIT:我忘了说,它只在表单内工作,因为它调用了表单的提交函数。在它之外,它不再可用(因为body标签没有提交函数)。
表单元素被放置在表单内侦听器的作用域链上,就像通过:
with (form) {
/* run listener code */
}
,所以标识符submit首先在处理程序的上下文中解析,然后在表单上解析,然后才是作用域链的其余部分。这是表单所特有的,可以在下面看到:
<form>
<input name="foo">
<input type="button" value="Do click" onclick="
function submit(){console.log('click')};
submit();
">
</form>
,其中单击按钮将运行侦听器中的submit函数,删除函数声明将运行表单的submit方法。这是表单所特有的。
请注意,当表单的submit方法被直接调用时,它的submit处理程序不会被调用。
在表单之外,标识符submit以正常方式解析