当前位置:嗨网首页>书籍在线阅读

22-讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.5.3 讨论

1.传递额外的参数

trigger() 能够接受一个或者多个值,这些值将传递给所触发的处理程序。

这些值可以是任何类型,任意个数。当有超过一个参数值时,需要用数组包装它们:

jQuery('form').trigger('submit', ['John','Doe', 28, {gender:'M'}]);

上述情况中绑定的函数如下:

jQuery('form').bind('submit', function(e, name, surname, age, extra){
   //用这些参数进行某些处理
});

这种方法简单且易于理解。问题是当需要接受许多参数时它看上去很糟糕;我个人认为参数的个数不能超过4~5个。

如果读者习惯于常见的 function(e){} 函数,这种方法也容易造成误导。

你开始觉得奇怪,其他这些参数是从哪里来的?

在编程事件中使用的其他例子:

jQuery('#slideshow').bind('add-image', function(e, src){
   var $img = jQuery('<img />').attr('src', src);
   jQuery(this).append($img);
});
jQuery('#slideshow').trigger('add-image', 'img/dogs4.jpg');

用在实际事件的例子:

jQuery('#button').bind('click', function(e, submit){
   if( submit )
     // 进行某些处理
   else
     // 进行其他的处理
});
jQuery('#button').trigger('click', true);

2.传递自定义事件对象

如果选择传递自定义事件对象,所传递的每个值可以当作处理程序接受的事件对象的属性来访问。

这意味着,无论传递多少数据,处理程序都只有一个参数——事件对象。

这比起第一个方法来已经是个优势,因为它使函数声明不那么冗长。

前面已经提到过,这种方法在jQuery 1.3之后变得更好。下面是使用自定义对象的第一个例子:

jQuery('form').bind('submit', function(e){
   //用e.name、e.surname等进行某些操作
});
jQuery('form').trigger({
   type:'submit',
   name:'John',
   surname:'Doe',
   age: 28,
   gender:'M'
});

传递一个对象实际上是创建一个 jQuery.Event 实例的快捷方式。[3]下面是另一种方法:

var e = jQuery.Event('submit'); // new运算符可以省略
e.name = 'John';
e.surname = 'Doe';
e.age = 28;
e.gender = 'M';
jQuery('form').trigger(e);

当然可以使用 jQuery.extend 代替一次设置一个属性的做法。

如果你计划在调用 trigger() 之后从这个对象中获取数据,就需要自行创建一个事件对象。顺便说一句,这是从处理程序向调用者传递信息的巧妙技术(下一章将介绍这方面的知识)。

3.这与event.data有何区别

使用 event.data 对于函数绑定时可以访问的静态值来说是有用的。当需要传递的数据必须在以后(或者每次)求值时, event.data 就无能为力了。