Javascript 在jQuery中绑定自定义事件时触发代码
JQuery非常支持自定义事件-Javascript 在jQuery中绑定自定义事件时触发代码,javascript,jquery,events,custom-events,Javascript,Jquery,Events,Custom Events,JQuery非常支持自定义事件-.bind(“foo”,function(e)…。但是,如果触发事件的机制还没有准备好,并且必须仅在绑定了事件的元素上构造,该怎么办 例如,我想要一个scrollin事件,当一个元素被滚动到一个视口中时触发该事件。为此,我需要onscroll检查所有元素,并触发那些在视口外而现在在视口内的元素的滚动。这是不可接受的 有一些技巧可以加快它的速度。例如,其中一个插件会检查“private”$.cache中的所有元素,并且只检查那些绑定了scrollin事件的元素 但这
.bind(“foo”,function(e)…
。但是,如果触发事件的机制还没有准备好,并且必须仅在绑定了事件的元素上构造,该怎么办
例如,我想要一个scrollin
事件,当一个元素被滚动到一个视口中时触发该事件。为此,我需要onscroll
检查所有元素,并触发那些在视口外而现在在视口内的元素的滚动。这是不可接受的
有一些技巧可以加快它的速度。例如,其中一个插件会检查“private”$.cache
中的所有元素,并且只检查那些绑定了scrollin
事件的元素
但这也很难看。我需要的是一个额外的事件绑定回调(除了处理回调之外),它将负责滚动管理,也就是将元素放入一些elementsCheckOnScrol
缓存数组中
我要找的东西是:
$.delegateBind("scrollin", function(jqSelection) { ... });
element.bind("scrollin", function(e) {..}); //Calls ^ after internal bind management
编辑:这将是一个很好的api
$.bind("bind", function(onWhat) { ... })
:-)如果我没有误解您的意思,您可以像这样修补bind
方法:
(function($) {
var oldBind = $.fn.bind;
$.fn.bind = function(name) {
if(name === "scrollin") {
delegateFunction(this);
}
oldBind.apply(this, arguments);
};
})(jQuery);
它所做的是检查是否绑定了滚动条
,如果是,则调用您的委托函数。之后,它只需调用原始的bind函数,该函数会像常规一样执行所有jQuery操作
添加此代码后,您可以像这样使用它:
请注意,这不支持将对象文本传递到.bind
(仅(name,func)
),但您也可以实现它。我发现了一个$.event.special
API,但我不知道它的“公开程度”。它不在文档中,并且以前至少更改过一次 事件委派和.live方法可能会满足您的要求。一个小演示可以帮助我们帮助您;)谢谢,那会管用的,但我希望有更干净的解决办法:-)@tillda:我不确定你想要的东西是不是本机内置的。
function delegateFunction(selection) {
alert(selection.length);
}
$('a').bind('scrollin', function() {});