.trigger()
.trigger( eventType [, extraParameters ] )
描述:针对给定的事件类型,执行附加到匹配的元素上的所有处理函数和行为。
- eventType类型:String一个字符串,它包含了一个JavaScript事件对象,比如说
click
或者keydown
。 - extraParameters类型:Array or PlainObject传递给事件处理函数的额外参数。
- event类型:EventA
jQuery.Event
object. - extraParameters类型:Array or PlainObject传递给事件处理函数的额外参数。
任何用.on()
方法或者它的简写方法之一附加的事件处理函数,会在对应的事件发生时,被触发。然而,可以用.trigger()
方法人为地引发它们。调用一次.trigger()
方法,会以用户自然触发这个事件同样的顺序执行处理函数。
$( "#foo" ).on( "click", function() { alert( $( this ).text() ); }); $( "#foo" ).trigger( "click" );
自从jQuery 1.3,.trigger()
的事件可以沿着DOM树向上冒泡;一个事件处理函数只要在事件处理函数中返回false,或者在传递给该事件的事件对象上调用.stopPropagation()
方法,就能阻止事件冒泡。虽然.trigger()
模拟了一个事件激活,具备合成的event对象,但是它并没有完美地复制自然发生的事件。
要想触发事件通过jQuery绑定的处理函数,但是不触发自然事件,请使用.triggerHandler()
代替它。
当我们使用.on()
方法定义了一个自定义事件类型时,给.trigger()
的第二个参数就变得有用了。举个例子,假设我们已经对我们的元素的custom
事件绑定了一个处理函数,而不是绑定到内建的click
事件:
$( "#foo" ).on( "custom", function( event, param1, param2 ) { alert( param1 + "\n" + param2 ); }); $( "#foo").trigger( "custom", [ "Custom", "Event" ] );
事件对象总是作为第一个参数,传递给一个事件处理函数。一个参数的数组也可以传递给.trigger()
调用,而且这些参数必须随着事件对象一起传给处理函数。自从jQuery 1.6.2,可以传递单一字符串参数或数字,而不需要包裹在一个数组中。
注意,在这里传递extraParameters
参数与传递给.on()
方法的eventData
参数的区别。两者都是向一个事件处理函数传递信息的机制,但是用于.trigger()
方法的extraParameters
允许在事件触发时决定信息,与此同时,用于.on()
方法的eventData
参数要求信息在绑定处理函数的时候已经计算好了。
.trigger()
方法可以用在包裹了简单的JavaScript 对象的jQuery集合上,类似于pub、sub机制;当事件被触发时,将调用任何绑定到对象上的事件处理函数。
event.preventDefault()
,jQuery会试图调用执行该属性作为一个方法。如果该行为是不想要的,请使用.triggerHandler()
代替它。.triggerHandler()
,在用一个事件调用.trigger()
时,如果该事件名加前缀on,就与元素上的一个属性名匹配(例如,在window上触发click
事件会有一个非空的onclick
方法),jQuery会试图调用执行这个属性作为一个方法。.length
属性,你应该在一个数组中传递该对象(例如,[ { length: 1 } ]
)示例
点击按钮#2也会触发对按钮#1的点击。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>trigger demo</title> <style> button { margin: 10px; } div { color: blue; font-weight: bold; } span { color: red; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <button>Button #1</button> <button>Button #2</button> <div><span>0</span> button #1 clicks.</div> <div><span>0</span> button #2 clicks.</div> <script> $( "button:first" ).click(function() { update( $( "span:first" ) ); }); $( "button:last" ).click(function() { $( "button:first" ).trigger( "click" ); update( $( "span:last" ) ); }); function update( j ) { var n = parseInt( j.text(), 10 ); j.text( n + 1 ); } </script> </body> </html>
演示结果
要想提交第一个表单而不使用submit()函数,试一试:
$( "form:first" ).trigger( "submit" );
要想提交第一个表单而不使用submit()函数,试一试:
var event = jQuery.Event( "submit" ); $( "form:first" ).trigger( event ); if ( event.isDefaultPrevented() ) { // 执行一个操作... }
向一个事件传递任意数据:
$( "p" ) .click(function( event, a, b ) { // 当引发一个自然点击时,a和b是undefined // 对于像下面这样的触发,a引用“foo”,b引用“bar” }) .trigger( "click", [ "foo", "bar" ] );
通过一个事件对象传递任意数据:
var event = jQuery.Event( "logged" ); event.user = "foo"; event.pass = "bar"; $( "body" ).trigger( event );
向事件对象传递数据的替代方法:
$( "body" ).trigger({ type:"logged", user:"foo", pass:"bar" });