Sta*_*arx 6 javascript forms event-handling
很惊讶,我在从JS提交表单时遇到了这个奇怪的问题.
考虑使用submit按钮和按钮两种方式提交的简单表单anchor link
<form method="POST" action="page.html" name="foobar" id="test">
<input type="text" />
<input type="submit" />
</form>
<a href="#" onclick="document.getElementById('test').submit();">click me</a>
Run Code Online (Sandbox Code Playgroud)
捕获提交事件的函数
document.getElementById('test').onsubmit = function() {
// Same result with
// * document.foobar.onsubmit
// * document.forms['foobar'].onsubmit
alert('foobar');
return false;
}
Run Code Online (Sandbox Code Playgroud)
现在,当单击submit按钮提交表单时,我会收到警报,但是在单击链接时则不会.这是为什么这样做的?
Rob*_*obG 12
为了提供合理明确的答案,HTML表单提交算法第 5项规定,如果未通过调用submit方法提交表单,则表单仅调度提交事件(这意味着它仅在按钮或其他隐式提交时调度提交事件方法,例如,当焦点在输入类型文本元素上时按下输入).
如果没有调度submit事件,则不会调用提交处理程序.
这与DOM 2 HTML规范不同,后者表示submit方法应该执行提交按钮的功能.
因此,如果要使用脚本提交表单,则应手动调用提交侦听器.如果使用addEventListener添加了侦听器,那么您需要记住它并调用它,因为您无法通过检查表单来发现它(如下所示).
如果侦听器是内联设置的,或者添加到DOM onsubmit属性,则可以执行以下操作:
<form onsubmit="return validate(this);" ...>
...
</form>
<button onclick="doSubmit()">submit form</button>
<script>
function doSubmit() {
var form = document.forms[0];
if (form.onsubmit) {
var result = form.onsubmit.call(form);
}
if (result !== false) {
form.submit();
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
如果你需要传递参数或做其他事情,生活会更艰难.
| 归档时间: |
|
| 查看次数: |
7111 次 |
| 最近记录: |