gpt4 book ai didi

javascript - HTMLFormElement 提交和重置方法与事件处理程序的关系

转载 作者:行者123 更新时间:2023-11-30 10:29:40 25 4
gpt4 key购买 nike

HTMLFormElement DOM 接口(interface)提供 .submit().reset()方法,我在我的单页应用程序中大量使用了这些方法。

现在我正试图找出这两种方法之间的关系并触发 form元素的 onsubmitonreset事件处理方法。


测试用例

考虑到这个完全有效的 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>

和下面的JS <script>表格下方的内容:

(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();
};
}());

Live demo

* 旁注:我知道 addEventListener可能优于 onevent处理程序,但是它会产生相同的效果,这只是一个简单的、与 IE8 兼容的示例。

单击 form 中的提交和重置按钮触发相应的onsubmitonreset方法很好,因为这些是必须触发事件处理程序的用户操作。

表单外的按钮调用 form元素的 .submit().reset()方法,即我在真实代码中以编程方式调用的方法。

通常,因为我以编程方式调用简单的 form来自代码端的方法,我希望这些不会触发任何表单事件。

但是,点击.reset()按钮确实发送一个onreset事件到 form , 而 .submit() form 发送任何事件.在 Chrome、Firefox 和 IE8 中测试。

* 使用 addEventListener 时行为相同而不是 on*处理程序。


问题

form 时是否会触发事件处理程序是否有标准的预期行为?的 .submit().reset()调用方法?

最佳答案

由于历史原因,.submit() 方法不一定(而且通常不会)触发 onsubmit 事件。值得注意的是,现代浏览器(最新的 Chrome、Firefox、Opera、Safari 甚至 IE8)在调用 form.submit() 时不会触发 onsubmit 事件

另一方面,.reset() 方法遵循 spec并执行与单击重置按钮相同的操作,其中包括将 onreset 事件分派(dispatch)给表单。在与上述段落相同的浏览器中进行测试。


引用

HTMLFormElement.submit MDN page :

The form's onsubmit event handler (for example, onsubmit="return
false;"
) will not be triggered when invoking this method from Gecko-based applications. In general, it is not guaranteed to be invoked by HTML user agents.

DOM Level 2 Recommendation :

Methods

reset
Restores a form element's default values. It performs the same action as a reset button.

submit
Submits the form. It performs the same action as a submit button.

[...]

Note: The onsubmit even handler is not guaranteed to be triggered when invoking this method. The behavior is inconsistent for historical reasons and authors should not rely on a particular one.

W3C mailing list :

submit Submits the form. It performs the same action as a submit button.

我觉得最后一句话不对。使用提交输入将 触发提交。提交方法不会。 [...]

关于javascript - HTMLFormElement 提交和重置方法与事件处理程序的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com