OLD | NEW |
| (Empty) |
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | |
2 <html> | |
3 <head> | |
4 <script src="../../resources/js-test.js"></script> | |
5 </head> | |
6 <body> | |
7 <p id="description"></p> | |
8 <div id="console"></div> | |
9 <script> | |
10 description('Tests that setting the .length on an HTMLSelectElement works in the
presence of DOM mutation listeners that reorder option elements'); | |
11 | |
12 var wrapper = document.createElement('div'); | |
13 document.body.appendChild(wrapper); | |
14 wrapper.innerHTML = '<select id="theSelect">' + | |
15 '<option id="a">a</option>' + | |
16 '<option id="b">b</option>' + | |
17 '<option id="c">c</option>' + | |
18 '<option id="d">d</option>' + | |
19 '</select>'; | |
20 | |
21 var sel = document.getElementById('theSelect'); | |
22 | |
23 var firstRemove = true; | |
24 function onRemove(e) { | |
25 if (firstRemove) { | |
26 // remove listener temporarily to avoid lots of nesting | |
27 sel.removeEventListener('DOMNodeRemoved', onRemove, false); | |
28 var lastOption = document.getElementById('d'); | |
29 sel.removeChild(lastOption); | |
30 sel.insertBefore(lastOption, document.getElementById('c')); | |
31 firstRemove = false; | |
32 sel.addEventListener('DOMNodeRemoved', onRemove, false); | |
33 } | |
34 } | |
35 | |
36 sel.addEventListener('DOMNodeRemoved', onRemove, false); | |
37 sel.addEventListener('DOMNodeInserted', function() {}, false); | |
38 | |
39 shouldBe('sel.length', '4'); | |
40 sel.length = 2; | |
41 shouldBe('sel.length', '2'); | |
42 shouldBe('sel.options.item(0).id', '"a"'); | |
43 shouldBe('sel.options.item(1).id', '"b"'); | |
44 </script> | |
45 </body> | |
46 </html> | |
OLD | NEW |