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

时间:2013-04-13 22:06:54

标签: jquery dom

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

中调用它,一切运行正常
 $(window).on("load",function(){}) 

块。我的两个问题是:

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

  2. 如何从

    中将此操作分配给此事件
     (function( $ ) { $.fn.resizeCss = function() {}; })(jQuery);
    

    阻止?

  3. 真的难倒在这里,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:5)

您应该可以根据需要多次为$(window).on("load"...分配操作。使用.on的一个主要好处是,如果您愿意,它可以让您为事件处理程序命名空间。

例如,在:

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

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

例如:

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

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

$(window).off("load")

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


至于你的第二个问题,我为这种混乱道歉,但我对(function($)有误。它实际上意味着其中的代码是自动执行的。换句话说,它会在自己的时间内自动执行,而不需要将其放入处理程序中。

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


<强>更新

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

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