如何为hoverIntent绑定多个事件处理程序?

我在其中一个js文件中有以下代码

$('#elementID').hoverIntent({ over: function() {//function#1 body}, out: function() {// function#2 body} }); 

在我的另一个js文件中,我想为hoverIntent添加另一个方法。 但新绑定会覆盖前一个绑定,只会执行新绑定。

 $('#elementID').hoverIntent({ over: function() {//function#3 body} }); 

所以我希望在hover时执行function#1和function#3。

是否可以使用hoverIntent?

如果没有,请你指点我另一个方向,所以我能做到吗?

注意:我无权更改第一个文件。 我只是想为hover添加额外的function。

谢谢。

一种方法是修改插件hoverIntent ,使其配置变量cfg是公共的。 在行cfg = $.extend(cfg, g ? { over: f, out: g } : f ); 在插件中,添加:

 cfg = $.extend(cfg, g ? { over: f, out: g } : f ); $.fn.hoverIntent.cfg = cfg; 

然后,你可以这样做:

 $("#elementID").hoverIntent({ over: function(){ $(this).val("over"); }, out: function(){ $(this).val("out"); } }); var cfg = $("#elementID").hoverIntent.cfg; $.extend(cfg, { over: function(){ $(this).val("new over"); } }); $("#elementID").hoverIntent(cfg); 

它并不理想,但我不确定在不修改插件,扩展配置变量和重新初始化#elementID情况下采用另一种方法。

更新1:

我以前误解了OP的要求。 他需要#1和#3function但不需要#2才能触发:

 $("#elementID").hoverIntent({ over: function(){ //function #1 }, out: function(){ //function #2 } }); var cfg = $("#elementID").hoverIntent.cfg; var oldOver = cfg.over; // function #1 $.extend(cfg, { out: false, over: function(){ oldOver(); // call oldOver aka function #1 above // function #3 }}); $("#elementID").hoverIntent(cfg); 

更新2:

我的上述解决方案不起作用,因为它只为cfg创建一个全局变量,然后通过$.hoverIntent任何其他用法进行$.hoverIntent

这是使用$.data()方法的另一种方法:

在行cfg = $.extend(cfg, g ? { over: f, out: g } : f ); 在插件中,添加:

 cfg = $.extend(cfg, g ? { over: f, out: g } : f ); $(this).data('cfg', cfg); 

然后:

 $("#elementID").hoverIntent({ over: function(){ //function #1 }, out: function(){ //function #2 } }); var cfg = $("#elementID").data('cfg'); var oldOver = cfg.over; // function #1 $.extend(cfg, { out: false, over: function(){ oldOver(); // call oldOver aka function #1 above // function #3 }}); $("#elementID").hoverIntent(cfg); 

我知道这是一个老问题,但它出现在搜索上,所以我在这里插入我的答案以防万一其他人遇到它。

hoverIntent插件不是为了处理多个回调,所以我修补了一个版本。 它没有完全测试跨浏览器的兼容性,但由于一切都是通过jQuery的API完成的,所以应该没问题。

Github链接

在我看来,hoverIntent插件没有设置为支持多个事件处理程序。 您可能需要修补hoverIntent代码才能使其正常工作。