2012-03-28 59 views
6

这是一个非常基本的问题,但我确信有人知道为什么。在HTML中,当我自己制作一个按钮元素,并且不给它和onclick而没有jQuery .click()时,该按钮将不会执行任何操作。完善。但是,当我这样做,但在<form>元素中的按钮,它会尝试发送所有表单元素的GET数据到我的网站的根地址?为什么这样做?我没有把它作为一个提交按钮,甚至在该表单上定义了一个methodactionHTML为什么表单中的按钮发送数据?

感谢您的信息提前!

**编辑**

这是我为解决这个问题所做的。对于<form>内的按钮,使用方法:

<button type="button"></button> 

,它不会在默认情况下做任何事情。

+0

我也想知道这一点。就我个人而言,我认为按钮应该只是一个按钮,并且'input [type = submit]'元素实际上应该提交表单... – 2012-03-28 13:30:25

+0

它的* by-desgin *特性。 – 2012-03-28 13:32:19

+0

我不确定我是否理解这个问题。按钮是使事情发生的机制。那么按钮的作用是什么?如果你不想要任何表单功能,为什么要使用'?顺便说一句,'method'是可选的,默认为'GET'; 'location'不是属性。 – 2012-03-28 13:38:04

回答

9

可以在相应的MDN条目中看到,按钮元素的type属性的默认值为submit。因此,如果您忽略它或不将其更改为buttonreset,则默认行为将启动并且表单被提交。

<form action=""> 
    <button type="button">Nothing will happen</button> 
    <button>Form gets submitted</button> 
</form> 
+0

我知道它确实提交,但不是为什么。感谢您的链接。 – kontur 2012-03-28 13:35:11

+0

我想这不是为什么,可能来自于尝试使代码在一天中更容易回复......也许。 – 2012-03-28 14:03:51

+0

@jeffery_the_wind我认为在早期的预期用途就是提交表单。那时候不需要额外的'type'属性。后来这个需求出现了,但为了保持向后兼容性,默认类型保持'submit'。只是我的想法 - 没有参考。 – Sirko 2012-03-28 14:09:41

0

它是这样设计的,因为你有时需要知道在服务器端按下了哪个按钮。如果您想要没有按钮的按钮功能,请使用样式化的A-tag。

0

按钮在表单中被视为提交控件,不知道为什么。

它发布到您的根目录的原因是您没有指定action,因此使用默认值。

它使用GET的原因是因为这是默认的method

要防止它发生,请将return false;添加到按钮末尾的onclick

相关问题