$.submit() 不工作[重复]

Posted

技术标签:

【中文标题】$.submit() 不工作[重复]【英文标题】:$.submit() not working [duplicate] 【发布时间】:2014-09-14 23:03:44 【问题描述】:

这是一件如此简单的事情,至少我是这么想的。但我就是不明白为什么会这样……

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】:

您将按钮命名为 submit,因此 form.submit 现在是按钮,而不是提交功能。 换句话说,您刚刚删除了本机提交功能并将其替换为您的按钮,这就是您收到错误 “object is not a function” 的原因。

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

FIDDLE

【讨论】:

只需从小提琴中删除$(form).trigger('submit'); 我觉得自己像个白痴,但谢谢@adeneo。认为这很简单,但希望这会帮助其他人遇到同样的问题! @SeeMeCode - 这实际上是一个很难发现的错误,所以不要觉得自己像个白痴,而且你不是第一个这样做的人。

以上是关于$.submit() 不工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

submit 防止重复提交 --禁止提交

document.getElementById("myForm").submit() 不起作用[重复]

如何防止HTMLFormElement.submit()调用表单提交[重复]。

未捕获的 TypeError:document.getElementById(...).submit 不是 HTMLDocument.<anonymous> 的函数 [重复]

jQuery on() 方法 - 不适用于 <input type "submit"> 或 <button> [重复]

检查请求是不是在 PHP 中回发 [重复]