在jQuery中绑定自定义事件时触发代码
Trigger code when custom event is being bound in jQuery
JQuery非常支持自定义事件- .bind("foo", function(e)...
。但是,如果触发事件的机制还没有准备好,只能在那些绑定了事件的元素上构建呢?
例如,我想要一个scrollin
事件,当一个元素被滚动到一个视口时被触发。要做到这一点,我将onscroll
必须检查所有的元素和trigger
scrollin
在那些外面的视口,现在是在里面。这是不能接受的。
有一些技巧可以加快速度。例如,其中一个插件检查"private"$.cache
中的所有元素,并且只检查那些具有scrollin
事件绑定的元素。
但那也很丑。我需要的是一个额外的回调事件的绑定(额外的回调处理),这将照顾滚动管理,即把元素(s)到一些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);
它所做的是检查scrollin
是否被绑定,如果是,调用您的委托函数。之后,它只是调用原来的bind函数,它做所有jQuery的事情,就像它经常做的那样。
添加了这段代码之后,您可以这样使用它:http://jsfiddle.net/pimvdb/g4k2G/.
function delegateFunction(selection) {
alert(selection.length);
}
$('a').bind('scrollin', function() {});
请注意,这并不支持将对象字面量传递给.bind
(只支持(name, func)
),但您也可以实现这一点。
我发现了一个$.event.special
API,但我不知道它是"多少"公共。它不在文档中,并且之前至少更改过一次。http://benalman.com/news/2010/03/jquery-special-events/
相关文章:
- 如何将javascript事件从web浏览器wpf控件发送到wpf的c#代码
- php代码在textbox更改事件上显示null
- 如何在Win8Metro应用程序的Javascript代码中捕获自己的C#事件
- 访问代码生成的输入元素上的keyup事件
- 如何在 JavaScript 代码中调试点击事件处理
- 如何使用我的Jquery代码创建委托事件侦听器
- 如何使用onclick事件触发此代码.我尝试过,但失败了
- 在单击事件中,第一次单击时激发代码一次,其余代码在所有单击时运行
- 为什么动态加载的事件在我的代码中不能正常工作
- 我需要java代码来打开html代码onclick事件
- 使用Javascript代码在文本框上激发退格事件
- onbeforeunload事件在我的代码中没有触发,但其他示例可以工作
- 如何在onclick事件执行代码时在ImageButton上设置加载gif
- 在按钮'上运行PHP代码;s onclick事件,或者使用Ajax
- 我想在每个按钮点击事件上加载多个图表.我使用了下面的谷歌代码
- HTML5 嵌入代码 - 事件属性未触发(已触发、暂停等)
- 在ionicPopup完成加载后运行代码/事件
- 如何在添加键代码事件处理程序后删除它
- 调试JS/CoffeeScript代码:事件,回调等
- 当值更改时,用于表单文本字段的代码事件侦听器