Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

onClick event doesn't work inside form tag

<!DOCTYPE html>
<html>
    <head>
    </head>
    <script>    
        function removeP2() {
            var parent = document.getElementById("section");
            var child = document.getElementById("p2");
            parent.removeChild(child);
        }
    </script>
    <body>
        <nav>
            <form>
               <button onclick="removeP2();">Remove</button> 
            </form>
        </nav>
        <section id="section">
            <p id="p1">Paragraph One.</p>
            <p id="p2">Paragraph Two.</p>
        </section>
    </body>
</html>

When I click the submit button, the function executes as usual, but after the function executes, the page reloads itself (removed P2 for a second).

I found a solution which is to delete the "Form" inside the "nav" tag, and it works fine. Just want to ask what is the problem cause that, and if I need to have the "Form" tag inside the "nav" tag, which part I need to fix?

like image 802
Daniel Choi Avatar asked Apr 21 '16 13:04

Daniel Choi


2 Answers

The form is getting submitted and your page is reloaded. You need to stop the form submit.

Solution 1: Add a type attribute to your button.

<button type="button" onclick="removeP2();">Remove</button>

This will make sure that the button is not of submit type (which is the default type for buttons inside form tag when type is not specified), and that the form is not submitted on click.

Solution 2: Prevent the Submit event in javascript. So make these changes.

<button onclick="removeP2(event);">Remove</button>

and in the script prevent this event

 function removeP2(event) {
   event.preventDefault(); // prevent the event , ie form submit event
   var parent = document.getElementById("section");
   var child = document.getElementById("p2");
   parent.removeChild(child);
 }

Solution 3: I dont see any need of the form tag over there in the HTML. If its the exact syntax of yours and you really dont have any other elements or purpose with the form submission then you can remove the form tag.

 <nav>
   <button onclick="removeP2();">Remove</button>         
 </nav>
like image 83
Rajshekar Reddy Avatar answered Sep 23 '22 10:09

Rajshekar Reddy


Use the code below. It won't submit the form.

<button type="button">My Button</button>
like image 37
Keyur Sakaria Avatar answered Sep 19 '22 10:09

Keyur Sakaria