2

我编写了一些代码,其工作方式类似于 jquery 插件,根据元素彼此的高度将 css 分配给元素。我一直在试图弄清楚如何使插件工作而无需从函数的外部调用/包装在 window.on("load", function(){}) 块中。我应该补充一点,如果我从外部调用它,一切都会运行良好

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

堵塞。我的两个问题是:

  1. 我可以为 $(window).on("load", function(){}) 事件分配多少次不同的操作?如果我多次分配某些内容,每个后续分配都会替换第一个,我应该添加类似 javascript addEventListener 方法的内容吗?

  2. 如何从

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

    堵塞?

真的很难过,任何帮助将不胜感激。

4

1 回答 1

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...事件中调用。这确实应该留给开发人员。

于 2013-04-13T22:10:50.640 回答