| 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 |