最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - onClick event doesn't work inside form tag - Stack Overflow

programmeradmin9浏览0评论
<!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?

<!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?

Share Improve this question edited Apr 21, 2016 at 13:26 ManoDestra 6,4736 gold badges27 silver badges50 bronze badges asked Apr 21, 2016 at 13:05 Daniel ChoiDaniel Choi 1051 gold badge2 silver badges9 bronze badges 3
  • 1 try to laod the script under the section and it will work – PacMan Commented Apr 21, 2016 at 13:06
  • The page reloads because the button submits the form. – nnnnnn Commented Apr 21, 2016 at 13:14
  • 1 You should also move that script inside your head tags, so that it preloads. It's sitting between the head and body, which is wrong. – ManoDestra Commented Apr 21, 2016 at 13:25
Add a ment  | 

6 Answers 6

Reset to default 16

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>

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

<button type="button">My Button</button>

See this code:

https://jsfiddle/y7mhu3oL/1/

The solution is onsubmit in form tag:

<script>    
    function removeP2() {
        document.getElementById("p2").remove();
        }   
    </script>
<body>
    <nav>
        <form method="POST" onsubmit="removeP2(); return false;">
           <button>Remove</button> 
        </form>
    </nav>
    <section id="section">
        <p id="p1">Paragraph One.</p>
        <p id="p2">Paragraph Two.</p>
    </section>
</body>

Because you are not defining a button type, your browser is assuming that the button is type="submit" and attempting to "submit" the form (even though you haven't defined any method or action).

If you add type="button" to the button tag, it overrides the default assumption of submit and won't attempt to submit the form.

jsfiddle: https://jsfiddle/hdpk8c3n/

event.preventDefault() is the correct answer. When you press a button inside a form, it will automatically submit that form, unless you prevent the default action with event.preventDefault;

function removeP2(event) {
    event.preventDefault()
    var parent = document.getElementById("section");
    var child = document.getElementById("p2");
    parent.removeChild(child);
}

Add type="button" to your button tag. In form tag, button's default type is submit. That is why when you click on the button, form is submitted and the page reloads.

发布评论

评论列表(0)

  1. 暂无评论