0

JQuery 对自定义事件有很好的支持 - .bind("foo", function(e).... 但是,如果触发事件的机制还没有准备好并且只能在那些绑定了事件的元素上构建呢?

例如,我想要一个scrollin在元素滚动到视口时触发的事件。为此,我onscroll必须检查所有元素以及trigger scrollin那些在视口之外而现在在视口内的元素。这是不可接受的。

有一些技巧可以加快速度。例如,其中一个插件会检查“私有”$.cache中的所有元素,并且只检查那些scrollin绑定了事件的元素。

但这也很丑陋。我需要的是一个额外的事件绑定回调(除了处理回调之外),它将负责滚动管理,即将元素放入某个elementsCheckOnScrol缓存数组中。

我正在寻找类似的东西:

$.delegateBind("scrollin", function(jqSelection) { ... });
element.bind("scrollin", function(e) {..}); //Calls ^ after internal bind management

编辑:这将是不错的 api!

$.bind("bind", function(onWhat) { ... }) 

:-)

4

2 回答 2

0

如果我没有误解你,你可以bind像这样修补方法:

(function($) {
    var oldBind = $.fn.bind;

    $.fn.bind = function(name) { 
        if(name === "scrollin") {
             delegateFunction(this);
        }

        oldBind.apply(this, arguments);
    };
})(jQuery);

它的作用是检查 ascrollin是否被绑定,如果是,则调用您的委托函数。之后它简单地调用原始的绑定函数,该函数像它经常做的那样做所有 jQuery 的事情。

添加此代码后,您可以像这样使用它:http: //jsfiddle.net/pimvdb/g4k2G/

function delegateFunction(selection) {
    alert(selection.length);
}

$('a').bind('scrollin', function() {});

请注意,这不支持将对象文字传递给.bind(仅(name, func)),但您也可以实现它。

于 2011-08-23T16:00:05.503 回答
0

我找到了一个$.event.specialAPI,但我不知道它是“多少”公开的。它不在文档中,并且之前至少更改过一次。http://benalman.com/news/2010/03/jquery-special-events/

于 2011-08-23T16:19:23.780 回答