在表单元素中提交()

时间:2010-11-07 23:23:05

标签: javascript

我注意到您可以在表单元素的事件处理程序中调用submit()。例如,

<input id="myInput" type="button" onclick="submit()" value="Test" />

点击上面代码生成的按钮将提交表单。有趣的是,我不能在事件处理程序之外调用submit()。没有为input元素定义submit成员。(document.getElementById("myInput").submitundefined。)那么,这个函数定义在哪里,哪里可以找到对这个函数的引用?

2 个答案:

答案 0 :(得分:3)

描述here in section 19.1.6

  

定义为HTML属性的事件处理程序具有更复杂的范围链(...)

  

事件处理程序的作用域链不会与定义处理程序的对象一起停止:它继续进行包含层次结构。对于前面描述的onclick事件处理程序,作用域链以处理函数的调用对象开头。然后它继续进行Button对象,正如我们已经讨论过的那样。之后,它继续向上移动HTML元素包含层次结构,并至少包含包含按钮的HTML <form>元素和包含该表单的Document对象。范围链的精确组成从未标准化,并且与实现有关。 Netscape 6和Mozilla包含所有包含对象(甚至包括<div>标签之类的东西),而IE 6则包含一个包含目标元素的更小的集合,以及包含Form对象(如果有)和Document对象。无论浏览器如何,作用域链中的最终对象都是Window对象,因为它总是在客户端JavaScript中。

所以我想已经很清楚,submit函数是form之一。如果事件处理程序是通过HTML属性定义的,那么范围链就是元素本身及其父元素。 它不是标准化的,所以不应该依赖这种行为。

答案 1 :(得分:0)

您会注意到以下错误:

<input id="myInput" type="button" onclick="this.submit()" value="Test" />

也就是说,submit()不是HTMLInputElement的方法,但是submit()正在解析Form的submit()函数。

例如:

<form action='test.php' method='get' id='myForm'>
   <input id="myInput" type="button" onclick="Foo()" value="Test" />
</form>
<script type='text/javascript'>
document.getElementById('myForm').Foo = function() {
   alert('Bar!');
};
</script>

点击按钮提醒'Bar!'。