| <!DOCTYPE HTML> |
| <title>label element click proxying via "for" attribute or nested labelable element</title> |
| <link rel="author" title="yaycmyk" href="mailto:evan@yaycmyk.com"> |
| <link rel="help" href="https://html.spec.whatwg.org/multipage/forms.html#the-label-element:the-label-element-10"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <form id="test"> |
| <input id="foo" type="checkbox" /> |
| <label id="foo-label" for="foo">foo</label> |
| |
| <label id="bar-label"> |
| <input id="bar" type="checkbox" /> bar |
| <input id="baz" type="checkbox" /> baz |
| </label> |
| |
| <input id="baz" type="checkbox" /> |
| <label id="baz-label" for="baz">baz</label> |
| </form> |
| <script> |
| "use strict"; |
| |
| async_test(t => { |
| const label = document.getElementById("foo-label"); |
| const input = document.getElementById("foo"); |
| |
| input.addEventListener("click", t.step_func_done()); |
| |
| label.click(); |
| |
| }, "label with for attribute should proxy click events to the associated element"); |
| |
| async_test(t => { |
| const label = document.getElementById("bar-label"); |
| const input = document.getElementById("bar"); |
| |
| input.addEventListener("click", t.step_func_done()); |
| |
| label.click(); |
| |
| }, "label without for attribute should proxy click events to the first labelable child"); |
| |
| async_test(t => { |
| |
| const label = document.getElementById("baz-label"); |
| const input = document.getElementById("baz"); |
| |
| input.addEventListener("click", t.unreached_func("Input should not receive click")); |
| label.addEventListener("click", t.step_func(ev => { |
| ev.preventDefault(); |
| t.step_timeout(() => t.done(), 500); |
| })); |
| |
| label.click(); |
| |
| }, "clicking a label that prevents the event's default should not proxy click events"); |
| |
| </script> |