MooTools - Программно запущенные события, не работающие с делегацией события

Действительно ценил бы, если кто-либо может помочь мне выяснить, почему я не могу запустить события программно при использовании делегации события в MooTools (от Элемента. Класс делегации).

Существует родитель

это имеет a change слушатель на некотором ребенке элементы. Когда событие изменения инициировано пользовательскими действиями, обработчик на родительском отделении инициирован, но когда я запускаю его программно с fireEvent на любом дочернем входе ничего не происходит. Основная установка:

HTML

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
​​​​​​​​​​​

js

$("listener").addEvent("change:relay(.color)", function() {
    alert("changed!!");
});

$("color").fireEvent("change"); // nothing happens

Обработчик событий на родительском отделении не становится названным. Любая справка ценится.Удачи!


Связанный вопрос: Сделайте события, инициированные с fireEvent пузырь вообще в дереве DOM? Мой текущий взлом должен диспетчеризировать событие исходно, которое работает (но взлом, тем не менее) - http://jsfiddle.net/SZZ3Z/1/

var event = document.createEvent("HTMLEvents")
event.initEvent("change", true);
document.getElementById("color").dispatchEvent(event); // instead of fireEvent

7
задан Anurag 22 April 2010 в 09:04
поделиться

1 ответ

это не будет работать слишком хорошо "как есть". проблема с восходящей цепочкой событий (и с программным запуском событий) заключается в том, что может потребоваться, чтобы объект события был «реальным», чтобы он содержал event.target , который сопоставляется со строкой реле. кроме того, document.id ("color"). fireEvent () не будет работать, поскольку сам цвет не имеет привязанного к нему события.

чтобы обойти это, вы подделываете событие родительскому слушателю, передавая объект события, содержащий целевой элемент, например:

document.id("listener").fireEvent("change", {
    target: document.id("color")
});

просмотр в действии: http://www.jsfiddle.net/xZFqp / 1 /

, если вы выполняете такие вещи, как event.stop в своей функции обратного вызова, вам необходимо передать {target: document.id ("color"), stop: Function.from} и т. Д. далее для любых методов событий, на которые вы можете ссылаться, но код делегирования события пока интересует только target .

16
ответ дан 6 December 2019 в 12:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: