我编写了一些像 jquery 插件一样工作的代码,根据元素之间的相对高度将 css 分配给元素。我一直试图弄清楚如何使插件工作,而不需要从函数外部调用/包装它在 window.on("load", function(){}) block 中。我应该补充一点,如果我从外部调用它,一切都会正常运行
$(window).on("load",function(){})
block 。我的两个问题是:
我可以为 $(window).on("load", function(){}) 事件分配操作多少次?如果我多次分配某些内容,每个后续分配都会替换第一个分配,我是否应该添加类似 javascript addEventListener 方法之类的内容?
如何在
中将我的操作分配给此事件(function( $ ) { $.fn.resizeCss = function() {}; })(jQuery);
阻止?
真的很困惑,任何帮助将不胜感激。
最佳答案
您应该能够根据需要多次向 $(window).on("load"...
分配操作。这是使用 的主要好处之一。
的一个优点是,如果您选择的话,它使您能够为事件处理程序命名空间。
例如,在:
$(window).on("load.loading1", function(){})
loading1
是事件处理程序的特定实例的名称。这很有用,因为除了事件之外,您还可以根据处理程序的名称来选择删除处理程序。
例如:
$(window).off("load.loading1")
将仅取消绑定(bind)loading1
事件处理程序,其中
$(window).off("load")
将取消绑定(bind)所有load
事件处理程序。
关于你的第二个问题,我很抱歉给你带来了困惑,但我对 (function($)
的理解是错误的。它实际上意味着其中的代码是自动执行的。换句话说,它会在自己的时间自动执行,无需放入处理程序中。
我仍然建议您将其从外部绑定(bind),因为这是更好的编码实践,并且通常会使您的插件更具可扩展性。
更新
根据您的评论,我可以告诉您,您可以做到这一点,以便开发人员不必键入 $(window).load
谁使用你的插件,但这是非常糟糕的编码实践。然而,这会让你的插件的可扩展性大大降低。另外,如果您使用 $(document).ready
执行此操作,则仅当插件的调用者不是元素时它才有效。这样做的原因是因为 jQuery 必须找到调用它的元素,并且为了找到它,文档必须已准备好使其可见。
您可以做的就是在插件本身中添加 $(window).load
处理程序。换句话说,它将位于用 $.fn....
声明的函数内部。您可能还想创建一些反馈,以便开发人员可以判断该函数是否在窗口加载之前被调用。然而,如前所述,我强烈建议不要这样做。更好的做法是在文档中记下该插件通常应从 $(window).load...
事件调用。这确实应该留给开发人员来做。
关于jquery - 将事件附加到 jquery 中的 window.on ("load", function(){}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15993451/