2012-03-28 6 views
6

Это очень рудиментарный вопрос, но я уверен, что кто-то знает почему. В HTML, когда я делаю элемент кнопки сам по себе и не даю его и onclick, и нет jQuery .click(), кнопка просто ничего не сделает. Отлично. Но когда я это делаю, но кнопка внутри элемента <form>, он пытается отправить данные GET всех элементов формы в корневой адрес моего веб-сайта? Почему это так? Я не сделал это кнопкой отправки или даже определил method или action на этой форме?HTML почему кнопки в формах отправляют данные?

Благодарим за информацию заранее!

** EDIT **

Это то, что я сделал, чтобы исправить эту проблему. Для кнопок внутри <form> используйте:

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

И это ничего не будет делать по умолчанию.

+0

Хотелось бы это узнать. Лично я думаю, что кнопка должна быть просто кнопкой, а элемент 'input [type = submit]' должен фактически отправить форму ... –

+0

Его функция * by-desgin *. –

+0

Я не уверен, что понимаю вопрос.Кнопки - это механизм для создания вещей. Так в чем же смысл кнопки, которая ничего не делает? И если вы не хотите каких-либо функциональных возможностей формы, зачем вообще использовать '? Кстати, 'method' является необязательным и по умолчанию используется' GET'; 'location' не является атрибутом. –

ответ

9

Как видно из соответствующей записи MDN, значением по умолчанию для свойства type элемента кнопки является submit. Поэтому, если вы опустите его или не измените на button или reset, поведение по умолчанию запустится, и форма будет отправлена.

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

Я знал, что это подчиняется, но не почему. Спасибо за ссылку. – kontur

+0

Я думаю, что нет причин, возможно, это происходит от попыток сделать код проще в день ... может быть. –

+0

@jeffery_the_wind Я думаю, что предполагаемое использование в первые дни было просто отправкой форм. В те дни не было необходимости в дополнительном свойстве 'type'. Позже эта необходимость возникла, но для сохранения обратной совместимости тип по умолчанию остался 'submit'. Просто мои мысли - никаких ссылок на это. – Sirko

0

Он был спроектирован таким образом, потому что вам иногда нужно знать, какая кнопка была нажата на стороне сервера. Если вы хотите функциональность кнопки без кнопки, используйте стилизованный тег A.

0

Кнопки обрабатываются как элементы управления в формах, не уверены в чем.

Причина, по которой он отправляется в ваш корень, заключается в том, что вы не указали action и поэтому используется по умолчанию.

Причина, по которой он используется GET, заключается в том, что это по умолчанию method.

Чтобы предотвратить это, добавьте return false; в конец вашей кнопки.

4

Я не делал это кнопка отправки

<button> элементы имеют a type attribute. The default value is submit. Установите type="button", если вы не хотите, чтобы он отправил форму.

или даже определить метод

method по умолчанию GET

или месте на этой форме ??

action по умолчанию соответствует URI.

Смежные вопросы