OnClick не срабатывает только с одним вводом при нажатии ввода

У меня проблемы с событиями в Internet Explorer 7.

Когда у меня есть форма с два или болееinput[type=text] и я нажимаю ввод, события происходят в следующем порядке:

  1. кнопка отправки (onClick)
  2. форма (onSubmit)

Образец кода:

<form onSubmit = "{alert('form::onSubmit'); return false;}">
    <input type = "text">
    <input type = "text">
    <input type = "submit" onClick = "{alert('button::onClick');}">
</form>

Если у меня есть только одинinput[type=text], и я нажимаю кнопку ввода, событие onClick не срабатывает. Образец кода:

<form onSubmit = "{alert('form::onSubmit'); return false;}">
    <input type = "text">
    <input type = "submit" onClick = "{alert('button::onClick');}">
</form>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
1
1 352
6

Ответы 6

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

Если вы хотите, чтобы код запускался, когда пользователь нажимает кнопку, и нет, когда пользователь нажимает клавишу ввода, используйте кнопку, отличную от type = "submit".

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

Может ли добавление дополнительного текстового поля изменить порядок табуляции ваших элементов (возможно, в этом случае кнопка станет элементом управления по умолчанию)?

Интересно, что если вы щелкнете по экрану (удалите фокус из текстового поля) во втором примере только с одним текстовым полем, событие onClick срабатывает ... Так что это не ожидаемое поведение, поскольку оно возникает только тогда, когда у вас есть только одно текстовое поле и, которое у вас есть фокус на текстовом поле.
Боюсь, вы обнаружили ошибку в браузере, и вам придется найти обходной путь или избегать использования события onClick в этом случае. Я использую событие onSubmit для проверки, потому что это «более безопасное» событие, которое с большей вероятностью будет работать в разных браузерах и в разных ситуациях.

Из любопытства используете ли вы DOCTYPE, и если да, то какой? Я не говорю, что проблема заключается в несовместимости с DOCTYPE, но режим quirks - это то, что нужно исключить, прежде чем пытаться что-то еще.

С момента появления браузеров одно поле ввода в форме отправлялось при вводе с кнопкой отправки или без нее. Это было сделано для того, чтобы людям было проще выполнять поиск на сайте из одного поля поиска.

Если вам нужно выполнить какой-то javascript в форме, безопаснее использовать onsubmit формы (и вернуть false, чтобы остановить отправку), а не выполнять скрипт в onClick кнопки отправки. Если вам нужно запустить javascript с помощью кнопки, используйте type = "button" вместо type = "submit" - надеюсь, это прояснило, что я имел в виду.

Я не голосовал против, но у меня проблемы с анализом последнего предложения. ("никогда ничего не делайте onClick кнопки отправки, но всегда делайте это в ... кнопке onClick" ???)

Tim Pietzcker 04.10.2010 16:24

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

<FORM onSubmit = "{alert('form::onSubmit'); return false;}">
    <INPUT TYPE = "text">
    <input type = "hidden" name = "dummy">
    <INPUT TYPE = "submit" onClick = "{alert('buttom::onClick');}">
</FORM>

В IE есть много запутанных исправлений, которые необходимо сделать для улучшения совместимости нашего кода.

Другие вопросы по теме