这是一件很简单的事情,或者我认为。但我只是不知道为什么会这样......
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()
调用表单来找到解决方法,但为什么我必须这样做?
为什么呢?为什么?为什么呢?
答案 0 :(得分:3)
您将按钮命名为submit
,因此form.submit
现在是按钮,而不是提交功能。
换句话说,您刚刚删除了原生提交功能并将其替换为您的按钮,这就是为什么您收到错误“对象不是函数”。
将按钮的名称更改为submit
以外的其他名称,它将起作用。