4 <meta http-equiv=
"Content-Type" content=
"text/html;charset=UTF-8" />
6 <title>Element Delegation Tests
</title>
8 <script src=
"../../../Source/Core/Core.js" type=
"text/javascript"></script>
9 <script src=
"../../../Source/Types/Array.js" type=
"text/javascript"></script>
10 <script src=
"../../../Source/Types/Function.js" type=
"text/javascript"></script>
11 <script src=
"../../../Source/Types/Number.js" type=
"text/javascript"></script>
12 <script src=
"../../../Source/Types/String.js" type=
"text/javascript"></script>
13 <script src=
"../../../Source/Types/Object.js" type=
"text/javascript"></script>
14 <script src=
"../../../Source/Types/DOMEvent.js" type=
"text/javascript"></script>
15 <script src=
"../../../Source/Browser/Browser.js" type=
"text/javascript"></script>
16 <script src=
"../../../Source/Slick/Slick.Parser.js" type=
"text/javascript"></script>
17 <script src=
"../../../Source/Slick/Slick.Finder.js" type=
"text/javascript"></script>
18 <script src=
"../../../Source/Element/Element.js" type=
"text/javascript"></script>
19 <script src=
"../../../Source/Element/Element.Event.js" type=
"text/javascript"></script>
20 <script src=
"../../../Source/Element/Element.Delegation.js" type=
"text/javascript"></script>
25 font:
13px sans-serif;
29 border-top:
1px dashed #AAA;
30 font: normal
22px sans-serif;
41 padding-bottom:
150px;
47 border-right:
1px dashed #AAA;
49 font-family: monospace;
60 background: greenyellow;
64 background: orangered;
68 background: greenyellow;
69 border:
1px solid black;
75 border-collapse: collapse;
78 #mouseenter_table tr {
79 background-color: cyan;
83 #mouseenter_table td {
84 border:
1px solid white;
100 var logger
= $('log');
101 var log = function(msg
, success
){
103 'class': success
== true ? 'success' : (success
== false ? 'fail' : ''),
105 }).inject(logger
, 'top');
112 <h1>Simple Click events
</h1>
116 <li><div style=
"font-weight: bold">Second
</div></li>
122 var secondLI
= document
.getElement('#list li:nth-child(2)');
123 var listListener = function(event
, matched
){
124 log('Matched element is <li>', matched
.get('tag') == 'li');
125 log('`this` == arguments[1]', matched
== this);
126 if (matched
== secondLI
) log('2nd event target tag == p', event
.target
.get('tag') == 'div');
129 var list
= $('list');
130 var listAdd
= list
.addEvent
.pass(['click:relay(li)', listListener
], list
);
131 var listRemove
= list
.removeEvent
.pass(['click:relay(li)', listListener
], list
);
137 <button onclick=
"listAdd()">Add Events
</button> -
138 <button onclick=
"listRemove()">Remove Events
</button>
141 <h1>Mouseenter / Mouseleave
</h1>
143 <div id=
"mouseenter_leave">
144 <div class=
"mouse box">
145 Enter or
<strong>leave
</strong> this element with your
<em>mouse
</em>.
146 The event should only fire once for each time you perform the action.
150 <h1>Mouseenter / Mouseleave with tr
</h1>
152 <table id=
"mouseenter_table">
162 $('mouseenter_leave').addEvents({
163 'mouseenter:relay(.mouse)': log
.pass(['enter', true]),
164 'mouseleave:relay(.mouse)': function(){
169 $('mouseenter_table').addEvents({
170 'mouseenter:relay(tr)': log
.pass(['entered tr', true]),
171 'mouseleave:relay(tr)': function(){
172 log('left tr', true);
178 <h1>Focus / Blur
</h1>
181 Click or tab to one of the input fields and the focus and blur
185 <div id=
"focus_blur">
186 <input type=
"text" /><br />
187 <input type=
"text" />
191 <button onclick=
"focusAdd()">Add Events
</button> -
192 <button onclick=
"focusRemove()">Remove Events
</button>
197 'focus:relay(input)': log
.pass(['focus', true]),
198 'blur:relay(input)': function(){
203 $('focus_blur').addEvents(focusEvents
);
204 var focusAdd = function(){
205 $('focus_blur').addEvents(focusEvents
);
207 var focusRemove = function(){
208 $('focus_blur').removeEvents(focusEvents
);
212 <h1>Submit / Reset
</h1>
215 Should work on the form and on a div wrapping the form.
216 Try tabbing to the buttons and press enter, or tabbing to
217 the element and press enter.
220 <div id=
"submit_wrapper">
223 <input type=
"text" value=
"some text" />
224 <input type=
"submit" value=
"Submit" />
225 <input type=
"reset" value=
"reset" />
227 <input type=
"submit" value=
"Does nothing" />
232 $('submit_wrapper').addEvents({
233 'submit:relay(div)': function(event
, matcher
){
234 event
.preventDefault();
235 log('submit on div', matcher
.get('tag') == 'div');
236 log('`event.target.tagName == form`', event
.target
.get('tag') == 'form');
238 'submit:relay(form)': function(event
, matcher
){
239 event
.preventDefault();
240 log('submit on form', matcher
.get('tag') == 'form');
242 'reset:relay(div)': function(){
251 Change the text. When you blur the input field, the change event
252 should fire for both the element which wraps the input fields
253 and bubble to it, and the input fields itself.
257 <input type=
"text" value=
"some text" class=
"someClass" /><br />
259 <option>First
</option>
260 <option>Second
</option>
261 <option>Third
</option>
263 <input type=
"checkbox" value=
"1" /><br />
264 <input type=
"radio" name=
"rad[]" value=
"1" /><input type=
"radio" name=
"rad[]" value=
"2" />
268 $('change').addEvent('change:relay(input.someClass,select,input[type="checkbox"],input[type="radio"])', function(){
271 $(document
.body
).addEvent('change:relay(#change)', function(){
272 log('change bubbles', true);
279 Select some text and the select event should fire
284 <input type=
"text" value=
"select some text in this input" id=
"select_input" />
289 var select_input
= $('select_input');
290 $('select').addEvent('select:relay(form)', function(event
){
292 log('`event.target.tagName == input`', event
.target
.get('tag') == 'input');
299 <textarea></textarea>
303 $('paste').addEvent('paste:relay(textarea)', function(event
){