HTMLFormElement
DOM 接口提供了.submit()
和.reset()
方法,我在我的单页应用程序中大量使用了这些方法。
现在我正试图弄清楚这两种方法之间的关系并触发form
元素onsubmit
和onreset
事件处理程序方法。
测试用例
所以考虑这个完全有效的 HTML5 文档:
<!DOCTYPE html>
<title>HTMLFormElement method-event relation test page</title>
<form style="border:solid">
<input name=foo>
<button>Submit</button>
<button type=reset>Reset</button>
</form>
<button id=js-submit>.submit()</button>
<button id=js-reset>.reset()</button>
<script>
以及表单正下方的以下 JS内容:
(function() {
var qs = function(s) {
return document.querySelector(s);
},
form = qs('form');
form.onsubmit = function(e) {
console.log('onsubmit fired');
return false;
};
form.onreset = function(e) {
console.log('onreset fired');
return false;
};
qs('#js-submit').onclick = function() {
form.submit();
};
qs('#js-reset').onclick = function() {
form.reset();
};
}());
* 旁注:我知道它addEventListener
可能比onevent
处理程序更受欢迎,但是它具有相同的效果,这只是一个简单的、与 IE8 兼容的说明。
form
单击相应的onsubmit
和方法中的提交和重置按钮onreset
就可以了,因为这些是必须触发事件处理程序的用户操作。
表单外部的按钮调用form
元素.submit()
和.reset()
方法,即我在真实代码中以编程方式调用的方法。
通常,当我以编程form
方式从代码端调用简单方法时,我希望这些不会触发任何表单事件。
但是,单击.reset()
按钮会向 发送onreset
事件form
,而.submit()
不会向 发送任何事件form
。在 Chrome、Firefox 和 IE8 中测试。
addEventListener
* 使用而不是处理程序时的行为是相同的on*
。
问题
form
对于调用a.submit()
和.reset()
方法时是否会触发事件处理程序,是否有标准的预期行为?