HTML+JS中出现诡异刷新?是button默认属性的锅!

/ 0评 / 0

写了半个月的Google Charts页面在我加入了一个新功能之后完全失控。具体现象为,无论页面上的哪个button,只要点击页面必强制刷新。而且能够明显看到button对应的function被执行,但是因为刷新导致回到初始页面。

通过各种办法debug了很久,一直没有发现自己的JS逻辑有哪里不对。尝试寻找Chrome浏览器的开发者工具中有无“事件追踪”功能,从而可以让我看到是什么操作触发了页面自动Refresh,也无果。后来看到CSDN上一篇类似问题的博文,终于发现了问题。没错,就是我新功能加入的这个button的锅。

以下转载自 CSDN 无_言的笔记本

以前在写练习的时候遇到过这样一个问题,自己在html中写了一个button:

<span class="hljs-tag"><<span class="hljs-title">button</span>></span>test1<span class="hljs-tag"></<span class="hljs-title">button</span>></span>

在没有给其附上onclick事件时是点击是不会有任何反应的。但是把这个button放入from表单时,无论有没有给button附上事件,点击后页面都会刷新 。
查找了半天资料网上有说是不是事件写错了或者是js冲突啊之类的问题,在确认了自己的所有方法没有写错之后,按照那些教程改了之后依旧没有解决,那么出现这种错误就不是冲突的问题。后来将button的代码加了一个type属性之后,问题就解决了!

<span class="hljs-tag"><<span class="hljs-title">button</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"button"</span>></span>test1<span class="hljs-tag"></<span class="hljs-title">button</span>></span>

到这个时候才发现自己犯了一个很弱智的问题,<button> 标签有一个默认的属性是type="submit" 等于说如果你不自己手动覆盖的话,每一个默认写的button都是起到submit的作用,自然页面就会刷新。当加上type="button" 后,button就变为了一个普通的按钮,需要加上onclick事件才会有相应的反应了。

虽然只是一个微不足道的小bug,但对html不熟的我来说确实是修改了很长一段时间,所以特此记录下来,以防以后遇到相同的坑。

 

依葫芦画瓢,果然加上属性后问题就解决了。这里不光是记录,还要吐槽下H5,莫名其妙加上一个默认属性submit是为哪般啊!这都什么年代了喂我去,加这个属性导致默认刷新,这不害人呢嘛!

更诡异的是,我写了半个月的代码,之前加入的好几个button都没有触发这个强制属性,唯有这一次因为增加了checkbox复选框,才导致了问题的出现。你说你表单中的button出这个问题也就算了,怎么还连坐把之前没问题的button们也给感染了?黑人问号系列....

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注