button-submit-children.html (2093B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org"> 4 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 8 <iframe name=frame1 id=frame1></iframe> 9 <form id=form1 target=frame1 action="does_not_exist.html"> 10 <div id=parentdiv> 11 <button id=submitbutton type=submit> 12 <div id=buttonchilddiv> 13 button child div text 14 </div> 15 </button> 16 </div> 17 </form> 18 19 <script> 20 async_test(t => { 21 window.addEventListener('load', () => { 22 const frame1 = document.getElementById('frame1'); 23 frame1.addEventListener('load', t.step_func_done(() => {})); 24 25 const submitButton = document.getElementById('submitbutton'); 26 submitButton.addEventListener('click', event => { 27 event.preventDefault(); 28 const form = document.getElementById('form1'); 29 form.submit(); 30 }); 31 32 const buttonChildDiv = document.getElementById('buttonchilddiv'); 33 buttonChildDiv.click(); 34 }); 35 }, 'This test will pass if a form navigation successfully occurs when clicking a child element of a <button type=submit> element with a onclick event handler which prevents the default form submission and manually calls form.submit() instead.'); 36 37 async_test(t => { 38 window.addEventListener('load', () => { 39 const frame1 = document.getElementById('frame1'); 40 frame1.addEventListener('load', t.step_func_done(() => {})); 41 42 const submitButton = document.getElementById('submitbutton'); 43 submitButton.addEventListener('click', event => { 44 const form = document.getElementById('form1'); 45 form.submit(); 46 }); 47 48 const parentDiv = document.getElementById("parentdiv"); 49 parentDiv.addEventListener("click", event => { 50 // event was already handled for the button 51 // but it's activation behavior won't have run yet and we prevent that now 52 event.preventDefault(); 53 }) 54 55 submitButton.click(); 56 }); 57 }, "clicking a submit button, which calls form.submit and has a parent calling e.prevenDefault() should still submit the form"); 58 </script>