почему не делегирует работу для прокрутки? - PullRequest
23 голосов
/ 13 февраля 2012

Я пытаюсь использовать делегат jquery для привязки к событиям прокрутки.

html

<div id='parent'>
        <div id='child'>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 </div>
</div>

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/

Почему это не работает?

Ответы [ 3 ]

36 голосов
/ 13 октября 2012

Потому что событие прокрутки не всплывает.http://www.quirksmode.org/dom/events/scroll.html

26 голосов
/ 27 мая 2015

почему не делегирует работу для прокрутки?

Поскольку событие прокрутки не проходит через DOM.

Но в современных браузерах (IE> 8) вы можете захватывать scroll событие , например, на уровне документа или любой статический контейнер для динамического элемента. Вы должны использовать метод 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-

Для объяснения различий между захватом / распространением событий см. здесь или там .

Имейте в виду, что захваченное событие всегда вызывается до любого другого всплывающего события того же рода.

0 голосов
/ 13 февраля 2012

Я думаю, что это может связать ваш свиток

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

в соответствии с просьбой оп:

я изменяю css, так что дочерний объект переполняется и использую jquery.scroll, и это работает, однако нет такого события scroll, как у вас, для jquery, о котором я не знаю, поэтому причина, по которой bin, live и т. Д. Не могут быть установить для прокрутки, а также почему ваш deligate не будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...