<кнопка> проти <тип вводу = «кнопка» />. Який використовувати?


1634

Переглядаючи більшість сайтів (включаючи SO), більшість з них використовує:

<input type="button" />

замість:

<button></button>
  • Які основні відмінності між ними, якщо такі є?
  • Чи є поважні причини використовувати один замість іншого?
  • Чи є вагомі причини використовувати комбінувати їх?
  • Чи використовуються <button>проблеми з сумісністю, оскільки це не дуже широко використовується?

Відповіді:


661

Ще одна проблема IE при використанні <button />:

І поки ми говоримо про IE, у нього є кілька помилок, пов’язаних із шириною кнопок. Це таємниче додасть додаткові накладки, коли ви намагаєтеся додати стилі, тобто вам доведеться додати крихітний хак, щоб все було під контролем.


186
Ця відповідь була у 2009 році, оскільки IE6 мертвий зараз, я припускаю, що немає причин не використовувати <button>зараз?
Росді Касім

75
Якщо вони хочуть піратства, нехай вони отримають приємну версію вашого сайту. Відкиньте IE6, скиньте IE7, на жаль, IE8 все ще потребує підтримки.
Джаред

15
Згідно зі сторінкою зворотного відліку IE6 від Microsoft, використання IE6 у Китаї все ще зберігається (станом на січень 2014 року) приблизно на 22%. ie6death.com зазначає, що підтримка IE6 закінчується 8 квітня 2014 р.
BryanH

54
Як багато хто вийшов з ладу, користувачі, які все ще користуються старими версіями IE, швидше за все, користуються Інтернетом, які виглядають жахливо зламаними.
jinglesthula

9
<button />також має formатрибут (і пов'язані з ним атрибути), тому його можна пов’язати з формами в інших частинах тіла документа.
Gup3rSuR4c

327

Так само, як бічна примітка, <button>буде неявно надіслано, що може спричинити проблеми, якщо ви хочете використовувати кнопку у формі, не надсилаючи її. Таким чином, ще одна причина використання <input type="button">(або <button type="button">)

Редагувати - детальніше

Без типу, buttonнеявно отримує типsubmit . Не має значення, скільки кнопок або вводів для надсилання у формі є, будь-яка з них, яка явно або неявно вводиться як надіслати, при натисканні на неї подає форму.

Існує 3 підтримувані типи кнопки

submit ||  "submits the form when clicked (default)"
reset  ||  "resets the fields in the form when clicked"
button ||  "clickable, but without any event handler until one is assigned"

4
Ви можете додати більше деталей? що станеться, якщо є кілька кнопок? це робить тільки type = 'submit'?
Simon_Weaver

44
О, шановний W3C, чому submitза замовчуванням, коли 99,9% форм має багато buttonз однією submit ?!
2грит

13
У багатьох формах також є лише одна кнопка, яка є надсилати. Я повинен був подзвонити в один або інший спосіб, я думаю.
jinglesthula

5
Це може бути ВІЛЬНА ГУТЧА! Мій тестовий код подає приблизно 80% часу, інакше він розглядався як звичайна кнопка. БЕЗКОШТОВНО при використанні <кнопки> в <form>
Сідвелл

4
@ mik01aj "Не має значення, скільки кнопок або вводів для надсилання у формі є; будь-яка з них, яка явно або неявно вводиться як надіслати, при натисканні кнопки надішле форму". Хіба це не очевидно? Будь-яка кнопка надсилання повинна надіслати форму. Навіщо це говорити? Що я пропускаю?
Бетон Ганне

174

Ця стаття, здається, пропонує досить хороший огляд різниці.

Зі сторінки:

Кнопки, створені за допомогою елемента BUTTON, функціонують так само, як кнопки, створені за допомогою елемента INPUT, але вони пропонують більш багаті можливості відображення: елемент BUTTON може мати вміст. Наприклад, елемент BUTTON, який містить такі функції зображення, як і може нагадувати елемент INPUT, тип якого встановлено на "image", але тип елемента BUTTON дозволяє вміст.

Елемент кнопки - W3C


44

Всередині <button>елемента можна розмістити вміст, наприклад текст або зображення.

<button type="button">Click Me!</button> 

Це різниця між цим елементом і кнопками, створеними за допомогою <input>елемента.


4
+1, оскільки <input />це дійсно недійсна стихія, тоді <button>як немає
Себастьян

39

Цитата

Важливо: Якщо ви використовуєте елемент кнопки у формі HTML, різні браузери надсилатимуть різні значення. Internet Explorer буде представляти текст між <button>і </button>тегами, в той час як інші браузери будуть представляти вміст значення атрибута. Використовуйте вхідний елемент для створення кнопок у формі HTML.

Від: http://www.w3schools.com/tags/tag_button.asp

Якщо я правильно розумію, відповідь - це сумісність і послідовність введення з браузера в браузер


43
@Hawken Цю сторінку написали ідіоти, які вважали, що W3Schools претендують на W3C. Насправді W3Schools не кращий і не гірший, ніж тисячі інших сайтів, які обробляють подібний матеріал.
Містер Лістер

насправді це залежить від версії IE та режиму IE - w3schools оновив інформацію з моменту цитати
Демієн

12
@MrLister Я спілкувався з людьми, які вважають, що W3Schools асоціюється з W3C. Хоча я не впевнений, що я згоден з "відповідальністю W3Fools за надання точної інформації", я думаю, що точність W3Schools залишає бажати кращого, і що його критики не обов'язково є ідіотами. (Я багато чому навчився у W3S, коли було добре; він не йшов у ногу зі стандартами.)
Marnen Laibow-Koser

17
@MrLister W3Schools - це найпоширеніше неофіційне джерело інформації про Інтернет-технології. А якість дійсно відстій. Чому б не виділити їх? І які деталі W3Fools помилилися? Все там мені здається правильним.
Marnen Laibow-Koser

19

Я цитую статтю Різниця між якорями, входами та кнопками :

Якорі ( <a>елемент) являють собою гіперпосилання, ресурси, до яких людина може переходити або завантажуватись у браузері. Якщо ви хочете дозволити своєму користувачу перейти на нову сторінку або завантажити файл, тоді використовуйте якір.

Вхід ( <input>) являє собою поле даних: тому деякі призначені для користувача дані ви маєте в виду для відправки на сервер. Існує кілька типів вводу, пов'язаних з кнопками:

  • <input type="submit">
  • <input type="image">
  • <input type="file">
  • <input type="reset">
  • <input type="button">

Кожен з них має значення, наприклад " файл " використовується для завантаження файлу, " скидання " очищає форму, а " подавати " відправляє дані на сервер. Перевірте посилання W3 на MDN або на W3Schools .

Кнопка ( <button>)елемент досить гнучкий:

  • ви можете вкладати елементи в межах кнопки, такі як зображення, абзаци чи заголовки;
  • кнопки також можуть містити ::beforeі ::afterпсевдоелементи;
  • кнопки підтримують disabledатрибут. Це полегшує їх увімкнення та вимкнення.

Знову перевірте посилання W3 на <button>тег на MDN або на W3Schools .


17

Цитування сторінки форм у керівництві HTML:

Кнопки, створені за допомогою елемента BUTTON, функціонують так само, як кнопки, створені за допомогою елемента INPUT, але вони пропонують більш багаті можливості відображення: елемент BUTTON може мати вміст. Наприклад, елемент BUTTON, який містить такі функції зображення, як і може нагадувати елемент INPUT, для типу якого встановлено значення "image", але тип елемента BUTTON дозволяє вміст.


17

Використовуйте кнопку з елемента введення, якщо ви хочете створити кнопку у формі. І використовуйте тег кнопок, якщо ви хочете створити кнопку для дії.


9
Для сценаріїв на стороні клієнта. <type type = "button"> не має функції в HTML.
iGEL

12
<button>
  • за замовчуванням поводиться так, як якщо б у нього був атрибут "type =" submit "
  • можна використовувати без форми, а також у формах.
  • Доступний вміст тексту або HTML
  • css псевдоелементи дозволено (як: раніше)
  • Назва тегу зазвичай унікальна для однієї форми

vs.

<input type='button'>
  • тип повинен бути встановлений на "подати", щоб вести себе як елемент подання
  • можна використовувати лише у формах.
  • дозволено лише текстовий вміст
  • відсутні псевдоелементи css
  • та сама назва тегу, що і більшість елементів форми (входи)

-
у сучасних браузерах обидва елементи легко стилізуються за допомогою css, але в більшості випадків buttonперевага віддається елементу, оскільки ви можете більше стилювати внутрішні html та псевдоелементи


9

Що стосується стилів CSS, то <button type="submit" class="Btn">Example</button>краще - це дає можливість використовувати CSS :beforeта :after псевдокласи, які можуть допомогти.

Завдяки <input type="button">візуальному візуалізації, яке відрізняється від класу <a>чи <span>коли стилюється у певних ситуаціях, я уникаю їх.

Дуже варто відзначити, що поточна відповідь була написана в 2009 році. IE6 вже не хвилює днів, тому <button type="submit">Wins</button>послідовність стилізації в моїх очах виходить на перше місце.


9

Існує велика різниця, якщо ви використовуєте jQuery. jQuery знає більше подій на входах, ніж на кнопках. На кнопок jQuery знає лише про події "натискання". Щодо входів, jQuery знає про події "клацання", "фокусування" та "розмиття".

Ви завжди можете прив’язувати події до своїх кнопок за потребою, але просто пам’ятайте, що події, про які jQuery автоматично знає, є різними. Наприклад, якщо ви створили функцію, яка виконувалася щоразу, коли на вашій сторінці була подія "focusin", введення запустить функцію, але кнопка не буде.


re: KjetilNordin - У нас був додаток, який знав про будь-які події фокусування на сторінці, і одна з них відбулася, відбулася дія. Тож якщо ви використовуєте вхід, ви могли переглядати всі елементи для однієї події. Не кажу, що ти повинен, але ти міг. Ризик полягає в тому, що хтось змінить вхід на кнопку, і тоді фокус не відбувається, і тоді ваша дія не відбудеться, і тоді ваш додаток переживає бум. Ось що з нами сталося. :)
MattC

1
використовувати події фокусування, коли на даний момент елемент націлений за допомогою миші / клавіатури. вони показують користувачеві, де вони знаходяться в документі.
Альберт

7

<button>гнучка тим, що може містити HTML. Більше того, стилю за допомогою CSS набагато простіше, і цей стиль насправді застосовується у всіх браузерах. Однак є деякі недоліки щодо Internet Explorer (Eww! IE!). Internet Explorer неправильно визначає атрибут значення, використовуючи вміст тегу як значення. Усі значення у формі надсилаються на сторону сервера, незалежно від того, натиснута кнопка чи ні. Це змушує використовувати це як <button type="submit">хитрість і біль.

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


7

Я просто хочу додати тут щось до решти відповідей. Елементи введення вважаються порожніми або недійсними (іншими порожніми елементами є область, база, br, col, hr, img, введення, посилання, мета та парам. Ви також можете перевірити тут ), тобто вони не можуть мати жодного вмісту. Окрім відсутності вмісту, порожні елементи не можуть мати жодних псевдоелементів, таких як :: after та :: before , що я вважаю головним недоліком.


4

окрім того, одна з відмінностей може виникнути від постачальника бібліотеки та того, що вони кодують. Наприклад, тут я використовую платформу cordova в поєднанні з мобільним кутовим інтерфейсом, і хоча теги input / div / etc добре працюють з натисканням кнопки, кнопка може призвести до краху налагоджувача Visual Studio, безумовно, через відмінності, які викликав програміст; зауважте, що відповідь MattC на ту саму проблему, jQuery - це просто ліб, і провайдер не думав про якусь функціональність на одному елементі, що надає інший. тому, коли ви використовуєте бібліотеку, ви можете зіткнутися з проблемою з одним елементом, з якою ви не зіткнетесь з іншим. і просто популярний, як-от input, в основному буде фіксованим, просто тому, що він більш популярний.


4

Хоча це дуже давнє запитання і, можливо, більше не актуальне, майте на увазі, що більшість проблем, які <button>раніше мали теги, вже не існує, і тому вкрай доцільно його використовувати.

Якщо ви не можете зробити це з різних причин, просто пам’ятайте, що додайте атрибут role = ”button” у свій тег як доступний. Ця стаття є досить інформативною: https://www.deque.com/blog/accessible-aria-buttons/

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