我有以下代码提交表单。如果我将事件侦听器函数名称用作提交,则表单不会被提交。如果我使用任何其他名称,它会。我不应该在JavaScript中使用像提交这样的HTML5关键字作为函数名吗?在这种情况下,提交是一个HTML5关键字,可用作任何 INPUT 元素的类型。
<form onsubmit="submit()">
<input type="email" name="email" />
<input type="submit"/>
</form>
function submit() {
var f = $('form').serialize();
alert(f);
}
答案 0 :(得分:1)
你已经在这里使用jQuery了,所以对整个问题更优雅的解决方案是:
// HTML
<form name="my-form">
<input type="email" name="email" />
<input type="submit"/>
</form>
然后有一个单独的JS文件:
//Js
$(document).ready(function(){
$('form[name="my-form"]').submit(function(e){
var f=$(this).serialize();
alert(f);
});
});
这也为您提供了额外的选项,以防止表单干净地提交;在submit(){ }
函数的末尾添加它。
e.preventDefault();
正如 OP 指出原始问题是函数名称submit()
是否可以用作表单中的onsubmit
属性。
This answer表示不能执行以下操作:
document.form['my-form'].submit();
是触发提交表单的有效方式;因此,方法名称不能包含在HTML中。 我现在正在寻找更好的来源以确认这一点我在Mozilla Developer Network找到了类似的来源,它确认了上面的代码,但没有明确定义关键字{{1} }无法使用。
答案 1 :(得分:0)
你知道,有另一种方法可以做到这一点。你可以将你的html与javascript enritelly分开。
<form id="form">
<input type="email" name="email" />
<input type="submit"/>
</form>
//Rest of your code
<script>
$(function() {
$('#form').submit(function() {
var f = $('#form').serialize();
// do your stuff
return true; // return false to cancel form action
});
});
</script>