stopPropagation.deferred.effect.html (2301B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title> Event.stopPropagation() deferred effect </title> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 </head> 8 <body> 9 <div id=log></div> 10 11 <table id="table" border="1" style="display: none"> 12 <tbody id="table-body"> 13 <tr id="table-row"> 14 <td id="table-cell">Shady Grove</td> 15 <td>Aeolian</td> 16 </tr> 17 <tr id="parent"> 18 <td id="target">Over the river, Charlie</td> 19 <td>Dorian</td> 20 </tr> 21 </tbody> 22 </table> 23 24 <script> 25 var EVENT = "foo"; 26 var TARGET = document.getElementById("target"); 27 var PARENT = document.getElementById("parent"); 28 var TBODY = document.getElementById("table-body"); 29 var TABLE = document.getElementById("table"); 30 var BODY = document.body; 31 var HTML = document.documentElement; 32 var CurrentTargets = [window, document, HTML, BODY, TABLE, TBODY, PARENT, TARGET]; 33 var ExpectResult = [window, window, document, document, HTML, HTML, BODY, BODY, TABLE, TABLE]; 34 var ActualResult = []; 35 var ExpectListeners = [0,1,0,1,0,1,0,1,0,1]; 36 var ActualListeners = []; 37 38 var description = "Test Description: " + 39 "stopPropagation() prevents other event listeners from being triggered but its effect must be " + 40 "deferred until all event listeners attached on the Event.currentTarget have been triggered."; 41 42 test(function() 43 { 44 for (var i=0; i < CurrentTargets.length; i++) 45 { 46 CurrentTargets[i].addEventListener(EVENT, function(e){TestEvent(e, 0)}, true); 47 CurrentTargets[i].addEventListener(EVENT, function(e){TestEvent(e, 1)}, true); 48 } 49 50 var evt = document.createEvent("Event"); 51 evt.initEvent(EVENT, true, true); 52 TARGET.dispatchEvent(evt); 53 54 assert_array_equals(ActualResult, ExpectResult, "ActualResult"); 55 assert_array_equals(ActualListeners, ExpectListeners, "ActualListeners"); 56 57 }, description); 58 59 function TestEvent(evt, i) 60 { 61 ActualResult.push(evt.currentTarget); 62 ActualListeners.push(i); 63 if ((1 == evt.eventPhase) && (TABLE == evt.currentTarget) && (0 == i)) 64 { 65 evt.stopPropagation(); 66 } 67 } 68 </script> 69 </body> 70 </html>