onClick事件在表单标记内不起作用

Dan*_*hoi 6 html javascript dom onclick onsubmit

<!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>
Run Code Online (Sandbox Code Playgroud)

当我单击提交按钮时,该函数照常执行,但在函数执行后,页面重新加载(删除P2一秒钟).

我找到了一个解决方案,即删除"nav"标签内的"Form",它工作正常.只是想问一下问题是什么原因,如果我需要在"nav"标签内加上"Form"标签,我需要修复哪一部分?

Raj*_*ddy 16

表单已提交,您的页面已重新加载.您需要停止表单提交.

解决方案1:type向按钮添加属性.

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

这将确保按钮不是submit类型(当未指定类型时,这是表单标记内按钮的默认类型),并且单击时不提交表单.

解决方案2:在javascript中阻止Submit事件.所以做出这些改变.

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

并在脚本中阻止此事件

 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);
 }
Run Code Online (Sandbox Code Playgroud)

解决方案3:我在HTML中看不到表单标签的任何需要.如果它是您的确切语法,并且您实际上没有表单提交的任何其他元素或目的,那么您可以删除form标记.

 <nav>
   <button onclick="removeP2();">Remove</button>         
 </nav>
Run Code Online (Sandbox Code Playgroud)