jQuery允许通过以下方式之一以编程方式触发表单提交:
$('.js-form-class-hook').submit();
$('.js-form-class-hook').trigger('submit');
注意:我的理解是,.trigger('submit')
相对于.submit()
的作用就像.on('submit',function(e){});
相对于.submit(function(e){});
的作用一样。简而言之,.trigger('submit')
是以编程方式提交表单的更强大的方法。
我已经知道.on('submit',function(e){});
和.submit(function(e){});
之间的一些区别,请参见我在What's the difference between $(form).submit and $(form).on("submit") in jQuery?上的回答,现在我想更好地了解.trigger('submit')
的作用。
我的结论:经过一些研究,我发现使用.trigger('submit')
似乎提供了“唯一”的(虽然非常强大的)优势,即允许传递任意数据。
示例用法1:
例如,这可以用于区分“人类”与“程序化”表单提交。
在jsbin.com/jivexawixonu/1/edit?html,js,console,output上查看实时演示(点击右上方的Run/Clear)
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) );
}
});
资源:
- api.jquery.com/submit
- api.jquery.com/trigger
- api.jquery.com/on
- www.inkling.com/read/jquery-cookbook-cody-lindley-1st/chapter-8/recipe-8-5
.trigger('submit')
提供了其他额外的功能吗?
还是说“允许传递任意数据”是使用 .trigger('submit')
的唯一优势?
submit()
函数所做的只是调用trigger('submit')
函数。因此实际上没有任何区别。 - Sir Celsius