jQuery方法:.submit()vs .trigger('submit')之间的区别

时间:2014-09-03 09:33:25

标签: javascript jquery html forms

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

资源:

  1. api.jquery.com/submit
  2. api.jquery.com/trigger
  3. api.jquery.com/on
  4. www.inkling.com/read/jquery-cookbook-cody-lindley-1st/chapter-8/recipe-8-5

  5. 我错过了.trigger('submit')提供的其他任何其他功能吗?

    或者&#34;允许传递任意数据&#34;使用.trigger('submit')的唯一优势是什么?

1 个答案:

答案 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')。两者都没有特殊功能,您选择的是个人偏好。

注意:同样适用于click()change()等。

  

是&#34;允许传递任意数据&#34;使用.trigger的唯一优势(&#39;提交&#39;)?

除非你考虑少一个函数调用优势,是的,它是。