Form-named-property-access.html 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <form id="formy">
  2. <input type="text" name="foo">
  3. <button type="button" name="bar"></button>
  4. <object name="baz"></object>
  5. <select name="qux"></select>
  6. <textarea name="quux"></textarea>
  7. <fieldset name="corge">
  8. <!-- input elements in the ImageData type state are excluded -->
  9. <input type="image" name="grault">
  10. </fieldset>
  11. <img id="inside" src="" alt="">
  12. </form>
  13. <input type="text" name="foo2" form="formy">
  14. <button type="button" name="bar2" form="formy"></button>
  15. <object name="baz2" form="formy"></object>
  16. <select name="qux2" form="formy"></select>
  17. <textarea name="quux2" form="formy"></textarea>
  18. <fieldset name="corge2" form="formy">
  19. <!-- input elements in the ImageData type state are excluded -->
  20. <input type="image" name="grault2" form="formy">
  21. </fieldset>
  22. <form id="form2"></form>
  23. <form id="form3">
  24. <fieldset form="form2" id="formset">
  25. <input type="button" id="button1" form="form2">
  26. <input type="button" id="button2" form="form3">
  27. <input type="button" id="button3"><!-- implicitly form3 -->
  28. </fieldset>
  29. </form>
  30. <form id="samename">
  31. <input type="text" name="a">
  32. <button type="button" name="a"></button>
  33. <object name="a"></object>
  34. <select name="a"></select>
  35. <textarea name="a"></textarea>
  36. <fieldset name="a">
  37. <!-- input elements in the ImageData type state are excluded -->
  38. <input type="image" name="a">
  39. </fieldset>
  40. <img id="a" src="" alt="">
  41. </form>
  42. <form id="sameid">
  43. <input type="text" id="a">
  44. <button type="button" id="a"></button>
  45. <object id="a"></object>
  46. <select id="a"></select>
  47. <textarea id="a"></textarea>
  48. <fieldset id="a">
  49. <!-- input elements in the ImageData type state are excluded -->
  50. <input type="image" id="a">
  51. </fieldset>
  52. <img id="a" src="" alt="">
  53. </form>
  54. <form id="changy">
  55. <input type="text" name="hello">
  56. </form>
  57. <form id="changeForFormAttribute"></form>
  58. <input id="changeForFormAttributeInput" type="text" name="changeForFormAttribute" />
  59. <script src="../include.js"></script>
  60. <script>
  61. test(() => {
  62. println("== Elements and Names ==");
  63. let formy = document.forms.formy;
  64. let elements = formy.elements;
  65. println(`formy.length: ${formy.length}`);
  66. println(`elements.length: ${elements.length}`);
  67. for (let i = 0; i < elements.length; i++) {
  68. if (elements[i] !== eval(`formy.${elements[i].name}`)) {
  69. println(`FAIL: elements[${i}] !== form.${elements[i].name}`);
  70. }
  71. else {
  72. println(`elements[${i}] === form.${elements[i].name}`);
  73. }
  74. }
  75. println("== If no listed elements, picks img ==");
  76. let image = document.getElementById("inside");
  77. println("form.inside == image: " + (formy.inside === image));
  78. println("== Form association ==");
  79. let form2 = document.getElementById("form2");
  80. let form3 = document.getElementById("form3");
  81. println(`elements in form2: ${form2.elements.length}`);
  82. println(`elements in form3: ${form3.elements.length}`);
  83. println("== Same name and id for many elements ==");
  84. let samename = document.getElementById("samename");
  85. println(`elements in samename: ${samename.elements.length}`);
  86. let samenameElements = samename.a;
  87. println(`samename.a.length: ${samenameElements.length}`);
  88. println(`typeof samename.a: ${typeof samenameElements}`);
  89. let sameid = document.getElementById("sameid");
  90. println(`elements in sameid: ${sameid.elements.length}`);
  91. let sameidElements = sameid.a;
  92. println(`sameid.a.length: ${sameidElements.length}`);
  93. println(`typeof sameid.a: ${typeof sameidElements}`);
  94. println("== Changing name/id ==");
  95. let changy = document.getElementById("changy");
  96. println(`elements in changy: ${changy.elements.length}`);
  97. let hello = changy.hello;
  98. changy.elements[0].name = "goodbye";
  99. let goodbye = changy.goodbye;
  100. println(`hello is goodbye? ${hello === goodbye}`);
  101. println(`Can we still use the same name?: ${changy.hello === changy.goodbye}`);
  102. let newInput = document.createElement("input");
  103. newInput.type = "text";
  104. newInput.id = "hello";
  105. changy.appendChild(newInput);
  106. println(`new hello is goodbye? ${changy.hello === goodbye}`);
  107. println(`new hello is old hello? ${changy.hello === hello}`);
  108. println(`new hello is newInput? ${changy.hello === newInput}`);
  109. println("== Changing form attribute ==");
  110. let changeForFormAttribute = document.getElementById("changeForFormAttribute");
  111. let changeForFormAttributeInput = document.getElementById("changeForFormAttributeInput");
  112. println(`elements in changeForFormAttribute: ${changeForFormAttribute.elements.length}`);
  113. changeForFormAttributeInput.setAttribute("form", "changeForFormAttribute");
  114. println(`elements in changeForFormAttribute: ${changeForFormAttribute.elements.length}`);
  115. changeForFormAttributeInput.setAttribute("form", "hakuna matata");
  116. println(`elements in changeForFormAttribute: ${changeForFormAttribute.elements.length}`);
  117. changeForFormAttributeInput.setAttribute("form", "changeForFormAttribute");
  118. println(`elements in changeForFormAttribute: ${changeForFormAttribute.elements.length}`);
  119. changeForFormAttributeInput.removeAttribute("form");
  120. println(`elements in changeForFormAttribute: ${changeForFormAttribute.elements.length}`);
  121. });
  122. </script>