.trigger()
.trigger( eventType [, extraParameters ] )
描述:针对给定的事件类型,执行附加到匹配的元素上的所有处理函数和行为。
- eventType类型:String一个字符串,它包含了一个JavaScript事件对象,比如说
click或者keydown。 - extraParameters类型:Array or PlainObject传递给事件处理函数的额外参数。
- event类型:EventA
jQuery.Eventobject. - 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"
});