.trigger()| jqueryAPI 2.2 中文手册- AspRain.cn 致力于Web开发技术翻译整理

jQuery API 2.2.0

.trigger()

分类:事件 > 事件处理附加物

返回: jQuery

.trigger( eventType [, extraParameters ] )

描述:针对给定的事件类型,执行附加到匹配的元素上的所有处理函数和行为。

加入于: 1.0
.trigger( eventType [, extraParameters ] )
  • eventType
    类型:String
    一个字符串,它包含了一个JavaScript事件对象,比如说click或者keydown
  • extraParameters
    类型:Array or PlainObject
    传递给事件处理函数的额外参数。
加入于: 1.3
.trigger( event [, extraParameters ] )

任何用.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机制;当事件被触发时,将调用任何绑定到对象上的事件处理函数。

注意:对于纯对象,以及除了window之外的DOM对象,如果一个触发的事件名匹配对象上的一个属性名,如果没有一个事件处理函数调用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"
});

如果网页上不能运行示例,请点击http://www.asprain.cn/jQueryAPI/trigger.htm查看示例。

如果你觉得本文档对你有用,欢迎给翻译作者支付宝打赏,支持翻译作者源源不断翻译更多有用的技术文档。