Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery中绑定自定义事件时触发代码_Javascript_Jquery_Events_Custom Events - Fatal编程技术网

Javascript 在jQuery中绑定自定义事件时触发代码

Javascript 在jQuery中绑定自定义事件时触发代码,javascript,jquery,events,custom-events,Javascript,Jquery,Events,Custom Events,JQuery非常支持自定义事件-.bind(“foo”,function(e)…。但是,如果触发事件的机制还没有准备好,并且必须仅在绑定了事件的元素上构造,该怎么办 例如,我想要一个scrollin事件,当一个元素被滚动到一个视口中时触发该事件。为此,我需要onscroll检查所有元素,并触发那些在视口外而现在在视口内的元素的滚动。这是不可接受的 有一些技巧可以加快它的速度。例如,其中一个插件会检查“private”$.cache中的所有元素,并且只检查那些绑定了scrollin事件的元素 但这

JQuery非常支持自定义事件-
.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() {});