$.submit()不起作用

$.submit() not working

本文关键字:不起作用 submit      更新时间:2023-09-26

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

jQuery的.submit()方法看起来很简单——传递给它一个函数,它充当侦听器。不要传递任何东西,它调用.trigger('submit')。但在过去的24小时里,它一直让我非常头疼。

基本上我想做的是建立一个简单的验证脚本。用户单击表单上的提交按钮,运行一个函数来验证输入,如果一切正常,则表单提交(默认方式,在此场景中没有花哨的ajax)。问题来了,当试图调用.submit上无论是jQuery对象或只是普通的'ole HTML DOM元素对象。我已经了解到,jQuery杀死原生.submit在HTMLFormElement,所以它是有道理的,为什么它不工作(我猜,但这似乎很愚蠢)。但是…为什么jQuery的.trigger('submit')(或简称.submit())不能工作?

示例(或者看一下小提琴):

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
    }
});

我确实找到了一个解决办法,通过调用使用.call()对HTMLFormElement原型的形式,但为什么我要这样做?

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

您将按钮命名为submit,因此form.submit现在是按钮,而不是提交函数。
换句话说,你只是删除了本地提交函数并用你的按钮代替了它,这就是为什么你会得到错误"object is not a function"

将按钮的名称更改为submit以外的东西,它将工作

小提琴