Різниця між <input type = 'button' /> та <input type = 'submit' />


223

Не існує такого поняття, як дурне запитання, тому ми підемо: в чому різниця між <input type='button' />і <input type='submit' />?


2
Елемент HTML <button> не надсилає форму самостійно, товариш ...
Теорія шестикутника

6
Насправді це є в деяких браузерах. Маючи форму без кнопки подання, але замість неї <кнопка> застосує функцію подання до неї. Firefox має таку поведінку.
джиші

Під час читання специфікацій W3C це фактично поведінка за замовчуванням, оскільки кнопки мають атрибут type, який за замовчуванням "подати".
джиші


37
У мене було те саме питання, і це, безумовно, не дурне питання, особливо якщо ви все життя були розробником веб-форм asp.net, де ми не використовуємо звичайний html дуже день, тому що дурні управління asp.net виплюнули це лайно для нас ... ось чому ми в кінцевому підсумку переходимо до MVC і мусимо повернутися до дитячого саду, щоб зрозуміти, як знову кодувати прості елементи форми. :)
PositiveGuy

Відповіді:


235

<input type="button" />кнопки не надсилають форму - вони за замовчуванням нічого не роблять. Зазвичай вони використовуються разом із JavaScript як частина програми AJAX.

<input type="submit"> кнопки надсилають форму, в якій вони перебувають, коли користувач натискає на них, якщо інше не вказано за допомогою JavaScript.


42
Також браузери можуть фіксувати натискання клавіші «Enter» у формі та надсилати форму автоматично, якщо є кнопка для надсилання, але не інакше.
Містер Блискучий і Новий 安 宇

2
Вони також роблять це, якщо у вас є тип = "зображення", яке можна використовувати для запуску подання форми при натисканні на неї.
джиші

5
Містер Блискучі та Нові: Форми можна надсилати за допомогою клавіші введення без будь-яких кнопок. Досить, наприклад, зосередитись на введенні тексту.
Ласар

3
Ви можете використовувати елементи BUTTON, хоча (несподіванка зненацька) виникає декілька проблем із ними при використанні улюбленого веб-переглядача (IE). Варто знати, хоча.

4
Це, очевидно, надзвичайно старе, але я відчуваю необхідність віддати свої 2 копійки, оскільки я вважаю, що це велике падіння використання кнопок типів ... форма події, що подається, НЕ запускається з подання javascript, що призводить до можливих кошмарів технічного обслуговування.
mothmonsterman

20

"Кнопка" - це саме те, кнопка, до якої ви можете додати додаткову функціональність за допомогою Javascript. Тип введення "Надіслати" має функціональні функції за замовчуванням подання форми, в яку він розміщений (хоча, звичайно, ви все ще можете додати додаткову функціональність за допомогою Javascript).


7

Кнопка не надсилає форму самостійно. Це проста кнопка, яка використовується для виконання певної операції за допомогою javascript, тоді як Submit - це певна кнопка, яка за замовчуванням надсилає форму кожного разу, коли користувач натискає кнопку "submit".


3

IE 8 фактично використовує першу кнопку, з якою вона стикається з поданням або кнопкою. Замість того, щоб легко вказати, що потрібно, зробивши його типом введення = надіслати замовлення на сторінці насправді важливо.


3

Слід також зазначити, що іменований вхід типу = "подати" також буде подано разом з назвами полів іншої форми, тоді як названий тип введення = "кнопка" не буде.

Іншими словами, у наведеному нижче прикладі названий вхід name=button1 НЕ буде подано, тоді як названий вхід name=submit1 НЕ буде поданий.

Зразок форми HTML (index.html):

<form action="checkout.php" method="POST">

  <!-- this won't get submitted despite being named -->
  <input type="button" name="button1" value="a button">

  <!-- this one does; so the input's TYPE is important! -->
  <input type="submit" name="submit1" value="a submit button">

</form>

PHP-скрипт (checkout.php), який обробляє дії вищевказаної форми:

<?php var_dump($_POST); ?>

Перевірте вище на локальній машині, створивши два файли у папці з назвою / tmp / test / та запустивши вбудований веб-сервер PHP з оболонки:

php -S localhost:3000 -t /tmp/test/

Відкрийте веб-переглядач за адресою http: // localhost: 3000 і переконайтеся самі.

Можна було б задатися питанням, чому нам потрібно подати названу кнопку? Це залежить від бек-енд-сценарію. Наприклад, плагін WooCommerce WordPress не обробляє опубліковану сторінку оформлення замовлення, якщо також не Place Orderбуде надіслана названа кнопка. Якщо ви зміните його тип від кнопки подання до кнопки, ця кнопка не надсилатиметься, і тому форма оформлення замовлення ніколи не буде оброблена.

Це, мабуть, невелика деталь, але ви знаєте, чорт у деталях.


Це відповідає специфікації чи це залежить від браузера?
Магнус Лінд Окслунд

0

<input type="button">їх можна використовувати де завгодно, а не лише у формі, і вони не надсилають форму, якщо вони є в одній. Набагато краще підходить Javascript.

<input type="submit">слід використовувати лише у формах, і вони надішлють запит (GET або POST) за вказаною URL-адресою. Їх не слід розміщувати ні в якому місці HTML.


0

Зрозуміло W3C щодо специфікації елемента Button

Кнопка може розглядатися як загальний клас для всіх типів кнопок без поведінки за замовчуванням.

W3C


0

type='Submit'встановлюється для переадресації та отримання значень BACK-END (PHP, .NET тощо). type='button'відображатиме нормальну поведінку кнопки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.