温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

button按钮无法提交表单问题发现与解决

发布时间:2020-07-13 04:10:46 来源:网络 阅读:3319 作者:飞舞的手指 栏目:开发技术

  前些天,我在用html制作登录框时遇到一个问题,form表单中的button不能提交表单中的数据。

  相信你知道,input的type="submit"有提交表单的功能,当然,我们自己也可以给一个input的type="button"的按钮自定义点击事件以提交表单。

  在这里我不用submit而用自定义的button的原因是,submit是无条件提交表单,而登录框需要对用户输入进行判断,自定义的button能实现在满足判断条件后才提交表单。


  以上,题外话,下面进入正题,我的button为什么不能提交表单?请看代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function(){
            var btn=document.getElementById('submit');
            var form=document.getElementsByTagName('form')[0];
            btn.onclick=function(){
                form.submit();
            }
        }
    </script>
</head>
<body>
    <form action="http://www.baidu.com" method="get">
    <input type="text" name="name" />
        <input id="submit" type="button" value="提交" />
    </form>
</body>
</html>

  原本应该是这样:我在输入框中随便打几个字,然后点击提交按钮,我的浏览器页面就向"www.baidu.com"提交一对键值对数据。 

  当我点击“提交”按钮,然而并没有什么反应。


  各种百度,各种搜贴,发现根本没人发现这个问题。找了好久,终于在一个老外的帖子中看到回复说是因为button取名为submit导致无法使用。

  为了验证,我把button的id名改了,然后发现问题完美解决。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function(){
            var btn=document.getElementById('btn');
            var form=document.getElementsByTagName('form')[0];
            btn.onclick=function(){
                form.submit();
            }
        }
    </script>
</head>
<body>
    <form action="http://www.baidu.com" method="get">
    <input type="text" name="name" />
        <input id="btn" type="button" value="提交" />
    </form>
</body>
</html>

  表单提交了,给百度穿了个"name=啊"的数据,如下图:

button按钮无法提交表单问题发现与解决


  后来,我又测试name属性,把button的id去掉,而是添加name属性并赋值"submit"。神奇,发现button又不能提交表单了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function(){
            var btn=document.getElementsByName('submit');     //通过name属性找到按钮元素
            var form=document.getElementsByTagName('form')[0];
            btn.onclick=function(){
                form.submit();       //调用表单的提交方法
            }
        }
    </script>
</head>
<body>
    <form action="http://www.baidu.com" method="get">
    <input type="text" name="name" />
        <input name="submit" type="button" value="提交" />
    </form>
</body>
</html>

  至此,问题的原因找到了。


  总结:不能提交的原因是:button的id是“submit”,导致了提交表单功能的失效。按F12,控制台报错了:Uncaught TypeError: form.submit is not a function 。问题的根源在于,对form中的button命名submit,这个名字和form的提交表单方法submit()名字重复了,这就导致了系统无法识别submit()这个方法,所以它不执行了。

  延伸:在编写代码时,我们应该注意命名的规范,应该与原生语言的保留字、关键字区分开。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI