Распространение событий

Бывают моменты, когда необходимо переопределить обработку некоторых событий DOM, встроенную в броузер, и с помощью функции dojo.connect подставить свои функции, которые будут обрабатывать эти события. В качестве двух наиболее типичных примеров можно привести необходимость предотвратить автоматический переход броузера после щелчка на гиперссылке и необходимость предотвратить автоматическую отправку формы по нажатию на клавишу Enter или в результате щелчка на кнопке Submit.

К счастью, помешать броузеру выполнить действие по умолчанию, заданное для этих событий DOM, очень просто – достаточно лишь вызвать функцию dojo.stopEvent или метод preventDefault объекта DOM-Event, и событие прекратит свое распространение по броузеру. Функция stopEvent принимает в качестве параметра объект DOMEvent:
dojo.stopEvent(/*DOMEvent*/evt)

Следующий пример демонстрирует применение функции stopEvent:
var foo = dojo.byId("foo"); //некоторый якорный элемент
dojo.connect(foo, "onclick", function(evt) {
console.log("anchor clicked");
dojo.stopEvent(evt); //предотвратит переход по ссылке и дальнейшее
//всплытие события
});

Точно так же просто отменяется автоматическая отправка формы, для этого достаточно передать контекст соединения и связать его с событием submit.


Однако на этот раз, чтобы отменить действие события по умолчанию, мы воспользуемся методом preventDefault объекта DOM-Event, который при этом не предотвращает дальнейшее всплытие события в дереве DOM:
var bar = dojo.byId("bar"); //some form element
dojo.connect(bar, "onsubmit", function(evt) {
console.log("form submitted");
evt.preventDefault();//предотвратит отправку формы, но не запретит
//дальнейшее всплытие события
});

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
Использование замыканий с функцией dojo.connect
Нормализация событий и клавиатуры
Обработчики событий
Организация взаимодействий по подписке