如何为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代码才能使其正常工作。