为什么不委托滚动工作?

我试图使用jquery委托绑定滚动事件。

HTML

Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah

CSS

 #parent { width:200px; height:200px; border:2px solid black; overflow:auto; } #child { width:300px; height:300px; background:red; } 

JavaScript的

 $('#parent').delegate('#child', 'scroll', function(){ alert(this) }) 

的jsfiddle

http://jsfiddle.net/C6DRR/1/

为什么不起作用?

我认为这可能会绑定你的卷轴

 $('#child').live('keyup', function() { var el = $(this); if (!el.data("has-scroll")) { el.data("has-scroll", true); el.scroll(function(){ //doscrollaction(el); }); } doscrollaction(el); }); 

根据op的要求:

我改变了css,所以孩子溢出并使用jquery.scroll,这是有效的,但是没有像你对jquery那样的“滚动”事件,而不是我知道的,因此bin,live等无法设置滚动的原因以及为什么你的deligate不起作用

因为滚动事件不会冒泡。 http://www.quirksmode.org/dom/events/scroll.html

为什么不委托滚动工作?

因为滚动事件不会通过DOM冒泡。

但是 ,在现代浏览器(IE> 8)上,您可以捕获滚动事件到例如文档级别或动态元素的任何静态容器。 你必须使用javascript addEventListener()方法将true作为useCapture参数传递,jQuery不支持捕获阶段:

注意: 在您的示例中, scroll事件发生在#parent级别,而不是#child

 document.addEventListener('scroll', function (event) { if (event.target.id === 'parent') { // or any other filtering condition console.log('scrolling', event.target); } }, true /*Capture event*/); 

-DEMO-

有关事件捕获/传播之间差异的说明,请参阅此处或此处 。

请注意,捕获的事件始终任何其他类似的冒泡事件之前触发。