jQuery允许通过以下任一方式以编程方式触发表单提交:
$('.js-form-class-hook').submit();
$('.js-form-class-hook').trigger('submit');
注意:我的理解是.trigger('submit')
是.submit()
.on('submit',function(e){});
与.submit(function(e){});
的关系。简而言之,.trigger('submit')
比.submit()
以编程方式提交表单更为强大。
我已经知道.on('submit',function(e){});
和.submit(function(e){});
之间的一些区别,请参阅我对What's the difference between $(form).submit and $(form).on("submit") in jQuery?的回答,我想现在更好地了解.trigger('submit')
的作用。< / p>
我的结论:经过一些研究后我发现使用.trigger('submit')
似乎只提供了#34; (虽然非常强大)允许传递任意数据
样本用法1:
例如,这可用于区分&#34; 人类&#34; vs&#34; programmatical &#34;表格提交。
在jsbin.com/jivexawixonu/1/edit?html,js,console,output
上查看实时演示(点击右上角的运行/清除)HTML
<form class="js-form-hook-xyz">
<button>Submit form</button>
</form>
的jQuery
var pleaseConfirmSubmission = function( formElem ){
// ... some conditions checks
// if condition met, submit with a flag
formElem.trigger( "submit" , ['isProgrammaticalSubmission'] );
}
$("body").on("submit", ".js-form-hook-xyz", function(event, isProgrammaticalSubmission) {
console.log("on form submission: " + ( isProgrammaticalSubmission || "isHumanAction !" ) );
if ( !isProgrammaticalSubmission ){ /* JS truthy/falsy value usage */
event.preventDefault(); /* cancel form submission */
pleaseConfirmSubmission( $(this) );
}
});
资源:
我错过了.trigger('submit')
提供的其他任何其他功能吗?
或者&#34;允许传递任意数据&#34;使用.trigger('submit')
的唯一优势是什么?
答案 0 :(得分:5)
没有参数的submit()
与trigger('submit')
之间基本没有区别,事实上submit()
没有参数最终会返回trigger()
。
您可以通过查看jQuery Source:
来证明这一点<强> jQuery.fn.submit()强>
function (data, fn) {
return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
}
因此,如果将参数传递给submit()
,则会调用.on('submit'...
,否则将调用.trigger('submit')
。
submit()
几乎是一种人类可读的方式来调用trigger('submit')
。两者都没有特殊功能,您选择的是个人偏好。
是&#34;允许传递任意数据&#34;使用.trigger的唯一优势(&#39;提交&#39;)?
除非你考虑少一个函数调用优势,是的,它是。