HTML5表单未提交

时间:2014-10-01 11:42:31

标签: html5 forms submit

我有以下代码提交表单。如果我将事件侦听器函数名称用作提交,则表单不会被提交。如果我使用任何其他名称,它会。我不应该在JavaScript中使用像提交这样的HTML5关键字作为函数名吗?在这种情况下,提交是一个HTML5关键字,可用作任何 INPUT 元素的类型。

<form onsubmit="submit()">
    <input type="email" name="email" />
    <input type="submit"/>
</form>

function submit() {
    var f = $('form').serialize();
    alert(f);
}

2 个答案:

答案 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>