在jquery中将事件附加到window.on(“load”,function(){})

我写了一些像jquery插件一样工作的代码,根据它们相对于彼此的高度为元素分配css。 我试图找出如何使插件工作而不调用/包装在window.on(“load”,function(){})块从函数的OUTSIDE。 我应该补充一点,如果我从外部调用它,一切运行正常

$(window).on("load",function(){}) 

块。 我的两个问题是:

  1. 我可以为$(window).on(“load”,function(){})事件分配动作多少次? 如果我多次分配一些东西,每个后续的分配会替换第一个,我应该添加类似javascript addEventListener方法吗?

  2. 如何从中将此操作分配给此事件

      (function( $ ) { $.fn.resizeCss = function() {}; })(jQuery); 

    块?

真的难倒在这里,任何帮助将不胜感激。

您应该能够将操作分配给$(window).on("load"...多次按照您的意愿。使用.on一个主要好处是它使您能够命名事件处理程序的命名空间,如果你这样选择。

例如,在:

 $(window).on("load.loading1", function(){}) 

loading1是事件处理程序的特定实例的名称。 这很有用,因为除了事件之外,您还可以选择根据名称删除处理程序。

例如:

 $(window).off("load.loading1") 

将取消绑定loading1事件处理程序,其中as

 $(window).off("load") 

将取消绑定所有load事件处理程序。

至于你的第二个问题,我为这个混乱道歉,但我错了(function($) 。它实际上意味着它内部的代码是自动执行的。换句话说,它在自己的时间执行,自动执行 – 不要放入处理程序。

我仍然建议你在外部绑定它,因为它是更好的编码实践,通常会使你的插件更具可扩展性。

UPDATE

根据您的评论,我可以告诉您,您可以这样做,以便$(window).load不必由使用您的插件的开发人员键入,但它是非常糟糕的编码实践。 但是,它会使您的插件显着降低可扩展性。 此外,如果您使用$(document).ready执行此操作,则仅在插件的调用者不是元素时才会起作用。 这样做的原因是因为调用它的元素必须由jQuery找到,并且为了找到它,文档必须已经准备好让它可见。

你可以做的是在你的插件中添加$(window).load处理程序。 换句话说,它将在用$.fn....声明的函数内部。 您可能还想创建一些反馈,以便开发人员可以在加载窗口之前判断函数是否已被调用。 但是,如前所述,我强烈建议不要这样做。 更好的做法是在文档中记下通常应该从$(window).load...事件中调用插件。 这真的应该留给开发人员。