如何定义一次性事件,以便即使事件已经发生,新处理程序也会触发(一次)?

时间:2013-07-02 04:44:32

标签: javascript jquery javascript-events

你知道这是怎么回事。

$(function() { ... });

会触发“文件就绪”事件是否已经发生?我想定义一个这样的事件。

该事件是jQuery中的一个特例。我想知道自定义事件是否可以使用标准事件机制以相同的方式运行。

理想情况下,我希望能够以“正常”方式定义处理程序:

$(document).on("init.mything", function() { ... });

如果以上在init.mything被触发之前运行,则此功能现在可用。但如果没有,则处理程序永远不会运行。

使这个棘手的是,除了jQuery已经加载之外,我不想假设任何东西。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不确定我是否已经完成了所有jQuery插件编码,但我认为这个基本结构应该适合你:

;(function ($) {
     $.fn.initMyThing(fn) {
         if (this.data('mything_init')) {
             fn.apply(this);
         } else {
             this.on("init.mything", function() {
                 $(this).data('mything_init', true);
                 fn.apply(this);
         }
     }
 })(jQuery);

这意味着您必须使用语法

$(selector).initMyThing(function() ...);

而不是.on()来建立处理程序。 document.ready工作方式的唯一原因是因为jQuery特别对待它。