Html input button type: — HTML: HyperText Markup Language

javascript — Теги form, input, button — непонятное поведение

Вопрос задан

Изменён 1 год 4 месяца назад

Просмотрен 54 раза

Суть проблемы: когда инпут и кнопка обернуты в форму, то при нажатии Enter на инпуте, срабатывает событие click на кнопке. Почему так происходит и как сделать так, чтобы клик на кнопке не срабатывал?

const btn = document.querySelector('button')
btn.addEventListener('click', (e) => {
  console.log(e.type, e.target.nodeName)
})
const form = document.querySelector('form')
form.addEventListener('submit', (e) => {
  e.preventDefault()
})
<form action="">
  <input type="text">
  <button>Кнопка</button>
</form>
  • javascript
  • html
  • form
  • события
8

Спасибо комментариям, подсказали правильное направление. Оказалось, что проблему можно решить, если разорвать связь между кнопкой и формой. Для этого кнопке надо установить атрибут form, который будет указывать на другую форму. В моем случае, я, вообще, оставил этот атрибут пустым

const btn = document.querySelector('button')
btn.addEventListener('click', (e) => {
  console.log(e.type, e.target.nodeName)
})
const form = document.querySelector('form')
form.addEventListener('submit', (e) => {
  e.preventDefault()
})
<form action="">
  <input type="text">
  <button form="">Кнопка</button>
</form>
2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

html — против . Что использовать?

спросил

Изменено 22 дня назад

Просмотрено 679 тысяч раз

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

 
 

вместо:

 <кнопка>
 
  • Каковы основные различия между ними, если они есть?
  • Есть ли веские причины использовать один вместо другого?
  • Есть ли веские причины для их объединения?
  • Приводит ли использование
  • html
  • кнопка
  • совместимость
3

  • Вот страница с описанием различий (в основном вы можете поместить html в <кнопка> )
  • И еще одна страница с описанием того, почему люди избегают (Подсказка: IE6)

Другая проблема IE при использовании

Это разница между этим элементом и кнопками, созданными с помощью элемента .

0

Цитата

Важно! Если вы используете элемент кнопки в HTML-форме, разные браузеры будут отправлять разные значения. Internet Explorer отправит текст между тегами , в то время как другие браузеры отправят содержимое атрибута value. Используйте элемент ввода для создания кнопок в HTML-форме.

Откуда: http://www.w3schools.com/tags/tag_button.asp

Если я правильно понимаю, ответ — совместимость и согласованность ввода из браузера в браузер

0

Я процитирую статью The Difference Between Anchors, Inputs and Buttons:

Anchors (элемент ) представляют собой гиперссылки, ресурсы, на которые человек может перейти или скачать в браузере. Если вы хотите, чтобы ваш пользователь мог перейти на новую страницу или загрузить файл, используйте привязку.

Ввод ( ) представляет собой поле данных: поэтому некоторые пользовательские данные вы хотите отправить на сервер. Существует несколько типов ввода, связанных с кнопками:

Каждый из них имеет значение, например « файл » используется для загрузки файла, «

сброс » очищает форму, а « отправить » отправляет данные на сервер. Проверьте ссылку W3 на MDN или на W3Schools.

Элемент button ( лучше, поскольку он дает вам возможность использовать псевдоклассы CSS :before и :after , которые могут помочь.

Из-за того, что визуально отличается от или при стилизации с помощью классов в определенных ситуациях, я избегаю их.

Стоит отметить, что текущий лучший ответ был написан в 2009 году. IE6 сейчас не вызывает беспокойства, поэтому 9Последовательность укладки 0027 в моих глазах выходит на первое место.

Я просто хочу добавить кое-что к остальным ответам здесь. Элементы input считаются пустыми или недействительными элементами (другими пустыми элементами являются area, base, br, col, hr, img, input, link, meta и param. Вы также можете проверить здесь), что означает, что они не могут иметь никакого содержимого. Помимо отсутствия содержимого, пустые элементы не могут иметь никаких псевдоэлементов, таких как ::after и ::before , что я считаю большим недостатком.

Существует большая разница, если вы используете jQuery. jQuery знает о большем количестве событий для ввода, чем для кнопок. На кнопках jQuery знает только о событиях «щелчок». При вводе jQuery знает о событиях «щелчок», «фокус» и «размытие».

Вы всегда можете привязать события к своим кнопкам по мере необходимости, но просто имейте в виду, что события, о которых jQuery автоматически знает, отличаются. Например, если вы создали функцию, которая выполнялась всякий раз, когда на вашей странице происходило событие «фокусировка», вход запускал функцию, а кнопку — нет.

2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *