如何使用 jQuery 在任意函数调用上触发事件

2023-12-26

我想知道是否可以使用 jQuery 的 bind() 在调用任意函数时触发自定义事件。就像是,

/* when cmsPlugin.func() is called, fire myCustom.func() too */
$.bind( cmsPlugin.func, myCustom.func );

我们在网站上使用 Drupal 的 Lightbox2 插件。

当显示灯箱时,我想触发一些自定义代码,这些代码将附加到灯箱中“下载”链接的点击。

Lightbox2 插件似乎没有调用 $.trigger(),所以我有几个选项 -

  • 寻找一种绑定到 javascript 函数调用的方法。 (在这种情况下,我相信是 Lightbox.end。)
  • 使用现有事件,例如 $(document).ready,它可能(?)作为灯箱显示的一部分被触发。
  • 扩展现有函数以添加 $.trigger() 调用。
  • 在检测到点击了灯箱触发元素后,只需重复敲击 myCustom.func() 一段时间即可。 (呃www。)
  • ________

您不能将事件侦听器绑定到函数。事件是从 DOM 节点绑定和触发的,因此您需要知道如何选择灯箱的标记。jQuery 现在允许这样做,但您仍然需要一个包装器来触发事件。

我能想到的最简洁的方法是包装 Lightbox.updateNav 函数并触发自定义事件。

(function(){
  var _updateNav = Lightbox.updateNav;

  Lightbox.updateNav = function () {
    $("#lightbox").trigger('lightbox.updateNav');
    _updateNav.apply(this, arguments);
  }
})();

#lightbox需要指向可以绑定事件侦听器的灯箱标记。我对 LightBox2 的 API 不太了解,无法告诉您具体如何做到这一点。

这比简单的包装函数更好,因为您可以连接任意数量的侦听器。

$("#lightbox").bind('lightbox.updateNav', function() {})

由于灯箱标记可能是动态创建和销毁的,因此您最好使用delegate相反(前提是您可以访问 jQuery 1.4.2)。如果您可以识别插入标记的位置,请将委托附加到父元素:

$('#lightbox-parent').delegate('#lightbox', 'lightbox.updateNav', function() {})

这比.live()所以如果可以的话我建议你这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 jQuery 在任意函数调用上触发事件 的相关文章

随机推荐