| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| description('Tests that setting .length on an HTMLSelectElement works in the presence of mutation event listeners that reparent options'); |
| |
| var sel = document.createElement('select'); |
| document.body.appendChild(sel); |
| var otherSel = document.createElement('select'); |
| document.body.appendChild(otherSel); |
| |
| function onRemove(e) { |
| if (e.target.nextSibling != null) { |
| // remove listener temporarily to avoid lots of nesting |
| sel.removeEventListener('DOMNodeRemoved', onRemove, false); |
| var n = e.target.nextSibling; |
| n.parentNode.removeChild(n); |
| otherSel.appendChild(n); |
| sel.addEventListener('DOMNodeRemoved', onRemove, false); |
| } |
| } |
| |
| sel.addEventListener('DOMNodeRemoved', onRemove, false); |
| sel.addEventListener('DOMNodeInserted', function() {}, false); |
| |
| sel.length = 200; |
| shouldBe('sel.length', '200'); |
| shouldBe('otherSel.length', '0'); |
| |
| sel.length = 100; |
| shouldBe('sel.length', '100'); |
| shouldBe('otherSel.length', '0'); |
| |
| sel.length = 180; |
| shouldBe('sel.length', '180'); |
| shouldBe('otherSel.length', '0'); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |