我编写了一些像jquery插件一样工作的代码,根据元素相对于彼此的高度为元素分配css。我试图弄清楚如何使插件工作而不调用/包装它在window.on(“load”,function(){})块中从函数的OUTSIDE。我应该补充一点,如果我从外部
中调用它,一切运行正常 $(window).on("load",function(){})
块。我的两个问题是:
我可以在$(window).on(“load”,function(){})事件中分配多少次操作?如果我多次分配一些东西,每个后续的分配会替换第一个,我应该添加类似javascript addEventListener方法吗?
如何从
中将此操作分配给此事件 (function( $ ) { $.fn.resizeCss = function() {}; })(jQuery);
阻止?
真的难倒在这里,任何帮助都会非常感激。
答案 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...
事件中调用插件。这真的应该留给开发者。