30.03.2013, 12:44
|
Кандидат Javascript-наук
|
|
Регистрация: 08.03.2011
Сообщений: 148
|
|
live обработчики
Хотелось бы узнать, live обработчики событий используют какой-то новый стандартный метод dom для установки live событий или jQuery просто отслеживает изменения в дум, и если такое изменение произошло, то проверят подходит ли изменившаяся часть dom под селектор, заданный при установке обработика и, если подходит, то вешается обработчик?
|
|
30.03.2013, 13:02
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
1) live устарел. Используй on
2) live вешает обработчик на document, который сравнивает event.target с нужным селектором.
|
|
30.03.2013, 13:07
|
Кандидат Javascript-наук
|
|
Регистрация: 08.03.2011
Сообщений: 148
|
|
2) live вешает обработчик на document, который сравнивает event.target с нужным селектором.
Че-то не понял. Можно поподробнее?
|
|
30.03.2013, 13:08
|
Кандидат Javascript-наук
|
|
Регистрация: 08.03.2011
Сообщений: 148
|
|
Какой обработчик вешается на document, обработчик какого события?
|
|
30.03.2013, 13:13
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от FanAizu
|
Хотелось бы узнать, live обработчики событий используют
|
Какие обработчики, каких событий?
|
|
30.03.2013, 13:23
|
Кандидат Javascript-наук
|
|
Регистрация: 08.03.2011
Сообщений: 148
|
|
Че-то я вас не понимаю совсем. Есть стандартный DOM метод, вешающий обработчик на какое-то событие к dom элементу, называется addEventListener по-моему. Ясно, что этот метод всего лишь один раз устанавливает обработчик к элементам и все. Поэтому и интересно, как же метод live работает, за счет чего обработчики добавляются к динамически добавленным элементам на страницу?
|
|
30.03.2013, 13:33
|
Кандидат Javascript-наук
|
|
Регистрация: 08.03.2011
Сообщений: 148
|
|
Знаю я основы и не только, причем тут основы?
|
|
30.03.2013, 14:12
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от FanAizu
|
за счет чего обработчики добавляются к динамически добавленным элементам на страницу?
|
Никак они не добавляются. Можешь в инспекторе проверить даже.
Я же объяснил: обработчик вешается на document. В event.target передается ссылка на элемент, на котором возникло событие.
<head>
<script>
function elementMatchesSelector(element, selector) {
return (element.webkitMatchesSelector ||
element.mozMatchesSelector ||
element.oMatchesSelector ||
element.msMatchesSelector).call(element, selector);
}
function live(selector, eventType, handler) {
document.addEventListener(eventType, function(e) {
if (elementMatchesSelector(e.target, selector)) {
handler.call(e.target, e);
}
});
}
</script>
</head>
<body>
<script>
live('button', 'click', function() {
alert('It works!!!');
});
var button = document.createElement('button');
button.textContent = 'Кнопка';
document.body.appendChild(button);
</script>
</body>
|
|
30.03.2013, 20:06
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
[offtop]
где-то читал про реализацию querySelectorAll для старых IE через стили, увидев это сообщения, сразу же в голову пришло, как сделать matchesSelector
function ieMatchesSelector(element, selector) {
var css = document.styleSheets[document.styleSheets.length - 1],
index = css.length, result = false;
css.addRule(selector, "fake:1", index);
if (element.currentStyle.fake) {
result = true;
}
css.removeRule(index);
return result;
}
alert(ieMatchesSelector(document.body, "html body"));
ну так… чтобы было
[/offtop]
|
|
31.03.2013, 02:40
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от nasqad
|
вам стоит изучить основы языка
|
насмешил))) Событийная модель к основам языка не относится.
FanAizu,
это называется делегирование. Есть такое понятие как погружение и всплытие событий. Тот же jQuery вешает обработчик события на document (чаще всего на отлов всплывающего события) и ловит событие в последнюю очередь, так как элемент document является самым верхним элементом, и при прослушивании всплывающих событий получает событие последним по цепи.
Допустим у нас есть элемент DIV на странице, кликнув по нему. Событие получит DIV, затем элемент выше допустим BODY (это если DIV лежит сразу в нем), потом событие получит HTML-элемент, а уж затем получит document. Это и есть всплытие, а погружение работает так же но наоборот события идут от document до элемента ниже.
модель всплытия:
Document
↑
HTML
↑
BODY
↑
DIV
Модель погружения:
Document
↓
HTML
↓
BODY
↓
DIV
|
|
|
|