JQuery trigger()

.trigger( eventType [, extraParameters ] )

 

描述:通过给定的事件类型执行所有绑定在匹配元素上的处理器和行为。

.trigger( eventType [, extraParameters ] )

版本:1.0

参数:eventType, 类型:String, 描述:表示javascript事件类型的字符串,例如click,submit

参数:extraParameters,类型:Array or PlainObject,描述:传递给事件处理器的额外参数

 

.trigger( event [, extraParameters ] )

版本:1.3

参数:event,类型:Event,描述:一个JQuery.Event对象

参数:extraParameters,类型:Array or PlainObject,描述:传递给事件处理器的额外参数

当相应的事件触发时,任何通过.on()或者一个快捷方法绑定的事件处理器会被触发。然而,他们可以通过.trigger()方法手动触发。通过调用.trigger()方法和用户自然触发事件,他们的执行顺序是相同的。

 

从JQuery1.3开始,trigger()事件会在dom树冒泡处理,可以通过在事件处理器中返回false或调用事件处理器中event对象的.stopProprgation()方法来阻止冒泡。尽管trigger()模拟了一个事件的激活,完成了event对象的合成,但是他并没有完美的复制自然发生的事件。

如果要触发JQuery绑定的事件而不触发原生的事件,用.triggerHandler()来代替.trigger()。

当我们通过.on()方法定义了一个自定义的事件类型,.trigger()的第二个参数就变的非常有用了。例如,假如我们像上面那样,自定的事件类型绑定我们自己的元素而不是绑定内置的click事件:

 

事件对象总是传递给事件处理器的第一个参数,数组参数会跟在事件对象之后顺序的传递给事件处理器。从JQuery1.6.2开始,可以不使用数组而单一的传递一个字符串或者数字。

注意向方法传递extraParameters参数和传入到.on()方法中eventData参数的区别。他们的机制都是向事件处理器传递信息,但是.trigger()的extraParameter参数是在事件被触发时才确定,而.on()的eventData参数要求在事件绑定的时候就已经计算好。

.trigger()方法可以用在包裹原生javascript对象的JQuery集合中,类似于pub/sub(publisher发布者/subscriber订阅者)机制。当事件触发时,任何绑定在事件上的处理器都会被调用。

注意:对于普通对象和dom对象除了window,如果触发事件的名称和对象的一个属性名称相匹配,JQuery会尝试调用属性作为方法如果事件处理器没有调用event.preventDefault()。如果不希望这种行为发生,可以使用.triggerHandler()来代替。

 

注意:和triggerHandler()一样,调用trigger()时,当事件的名称和对象属性的名称相匹配时,属性名称会加上on前缀(例如,在非空onclick方法的window上触发click),JQuery会尝试调用该属性作为方法。

 

 

例子

 

例子:点击button2同时触发button1

<!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="//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() ) {
// Perform an action...
}

 

例子:向事件中传入任意数据:

$( "p" )
.click(function( event, a, b ) {
// When a normal click fires, a and b are undefined
// for a trigger like below a refers to "foo" and b refers to "bar"
})
.trigger( "click", [ "foo", "bar" ] );

 

例子:通过event对象,向事件中传入任意数据:

var event = jQuery.Event( "logged" );
event.user = "foo";
event.pass = "bar";
$( "body" ).trigger( event );

 

例子:其他通过event对象传入数据的方法:

$( "body" ).trigger({
type:"logged",
user:"foo",
pass:"bar"
});
 

 

发表评论