$ .submit()不起作用

时间:2014-07-23 16:27:54

标签: javascript jquery html forms

这是一件很简单的事情,或者我认为。但我只是不知道为什么会这样......

jQuery's .submit() method。似乎很容易 - 传递一个函数,并充当听众。不要传递任何内容,它会调用.trigger('submit')。但在过去的24小时里,这对我来说是一个巨大的麻烦。

基本上我要做的是构建一个简单的验证脚本。用户单击表单上的提交按钮,运行一个函数来验证输入,如果世界上一切都很好,表单提交(默认方式,在这种情况下没有花哨的ajax)。当尝试在jQuery对象或简单的'ole HTML DOM元素对象上调用.submit时会出现此问题。我已经了解到jQuery杀死了HTMLFormElement上的原生.submit,所以它为什么不起作用是有道理的(我猜,但这看起来很愚蠢)。但是......为什么jQuery的.trigger('submit')(或简称.submit())不起作用?

示例(或查看Fiddle):

HTML:

<form class="comment-form" action="#" method="get">
    <input type="submit" id="submit" name="submit" value="submit"/>
</form>

JavaScript的:

$('.comment-form').on('click', '#submit', function(e) {
    var form = e.delegateTarget;

    e.preventDefault();

    // For the purpose of demonstration, just setting it true
    if (true) {
        form.submit(); // object is not a function - this makes sense since jQuery is overriding this
        $(form).submit(); // nothin at all :(
        $(form).trigger('submit'); // nope, nada
    }
});

我确实通过在HTMLFormElement原型上使用.call()调用表单来找到解决方法,但为什么我必须这样做?

为什么呢?为什么?为什么呢?

1 个答案:

答案 0 :(得分:3)

您将按钮命名为submit,因此form.submit现在是按钮,而不是提交功能。
换句话说,您刚刚删除了原生提交功能并将其替换为您的按钮,这就是为什么您收到错误“对象不是函数”

将按钮的名称更改为submit以外的其他名称,它将起作用。

FIDDLE