Ако приемем, че FORM съдържа INPUT, имайте следните слушатели:
javascript
function formFirst(e) { ... }
function formLast(e) { ... }
function inputFirst(e) { ... }
function inputLast(e) { ... }
function middle(e) { ... }
document.getElementById('form').addEventListener('change',formFirst,true);
document.getElementById('form').addEventListener('change',formLast,false);
document.getElementById('input').addEventListener('change',inputFirst,true);
document.getElementById('input').addEventListener('change',inputLast,false);
желан ред на изпичане
formFirst() // normal - outer element, useCapture = true
inputFirst() // normal - triggering element, declared first
middle() // -- how to do this?
inputLast() // normal - triggering element, declared second
formLast() // normal - outer element, useCapture = false
естеството на проблема и опита за решения
Собствен код на ниво FORM, formFirst
, formLast
и middle
, но няма достъп до INPUT код, inputFirst
и inputLast
- въпреки че може да добави собствени слушатели на INPUT.
Опит 1 модифицира formFirst()
за създаване и изпращане на нов change Event
(ще бъде игнориран в рамките на formFirst
), който ще извика inputFirst()
, но няма начин да спре разпространението, за да предотврати последващото извикване на inputLast()
.
Опит 2 добавяне на middle
като слушател към INPUT, но не може да гарантира реда на задействане на два слушателя от един и същи тип и една и съща употребаCapture.
Предпоставката на опит 2 е неправилна - редът на изстрелване се определя от реда на деклариране в целевия елемент.
Ето правилата
нецелеви елемент задейства с
useCapture=false
, започвайки от най-външния елемент и работейки към целевия елементa) ако повече от един
useCapture=true
се задейства за един и същ елемент, тогава редът на деклариране.в целевия елемент, ред на деклариране, независимо от
useCapture
нецелевият елемент се задейства с
useCapture=false
, започвайки от най-вътрешния елемент и работейки далеч от целевия елементa) ако повече от един
useCapture=false
се задействат за един и същ елемент, тогава редът на деклариране.