在jQuery中绑定自定义事件时的触发代码
问题描述:
JQuery对自定义事件 - .bind("foo", function(e)...
有很好的支持。但是,如果触发事件的机制还没有准备好,只能在那些事件绑定的元素上构建,在jQuery中绑定自定义事件时的触发代码
例如,我想要一个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) { ... })
:-)
答
我发现了一个$.event.special
API,但我不知道“多少”公开它。它不在文档中,并且至少已经更改过一次。 http://benalman.com/news/2010/03/jquery-special-events/
答
如果我没有误解你,你可以修补bind
方法是这样的:
(function($) {
var oldBind = $.fn.bind;
$.fn.bind = function(name) {
if(name === "scrollin") {
delegateFunction(this);
}
oldBind.apply(this, arguments);
};
})(jQuery);
它所做的是检查是否scrollin
被绑定,如果是的话,调用你的委托功能。之后,它只是简单地调用原始绑定函数,它可以定期执行所有jQuery的事情。
添加此代码后,您可以像这样使用它:http://jsfiddle.net/pimvdb/g4k2G/。
function delegateFunction(selection) {
alert(selection.length);
}
$('a').bind('scrollin', function() {});
注意,这不支持对象文本传递给.bind
(仅(name, func)
),但你可以实现这一点。
事件委托,并且.live方法可能会授予您想要的内容。一个小小的演示可以帮助我们;) – roselan