У меня проблемы с событиями в Internet Explorer 7.
Когда у меня есть форма с два или болееinput[type=text] и я нажимаю ввод, события происходят в следующем порядке:
onClick)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>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы хотите, чтобы код запускался, когда пользователь нажимает клавишу ввода, просто используйте обработчик onSubmit.
Если вы хотите, чтобы код запускался, когда пользователь нажимает кнопку, и нет, когда пользователь нажимает клавишу ввода, используйте кнопку, отличную от type = "submit".
Кнопка onclick должна (я думаю) срабатывать только в том случае, если кнопка действительно нажата (или когда фокус находится на ней, и пользователь нажимает кнопку ввода), если вы не добавили логику, чтобы изменить это.
Может ли добавление дополнительного текстового поля изменить порядок табуляции ваших элементов (возможно, в этом случае кнопка станет элементом управления по умолчанию)?
Интересно, что если вы щелкнете по экрану (удалите фокус из текстового поля) во втором примере только с одним текстовым полем, событие onClick срабатывает ... Так что это не ожидаемое поведение, поскольку оно возникает только тогда, когда у вас есть только одно текстовое поле и, которое у вас есть фокус на текстовом поле.
Боюсь, вы обнаружили ошибку в браузере, и вам придется найти обходной путь или избегать использования события onClick в этом случае.
Я использую событие onSubmit для проверки, потому что это «более безопасное» событие, которое с большей вероятностью будет работать в разных браузерах и в разных ситуациях.
Из любопытства используете ли вы DOCTYPE, и если да, то какой? Я не говорю, что проблема заключается в несовместимости с DOCTYPE, но режим quirks - это то, что нужно исключить, прежде чем пытаться что-то еще.
С момента появления браузеров одно поле ввода в форме отправлялось при вводе с кнопкой отправки или без нее. Это было сделано для того, чтобы людям было проще выполнять поиск на сайте из одного поля поиска.
Если вам нужно выполнить какой-то javascript в форме, безопаснее использовать onsubmit формы (и вернуть false, чтобы остановить отправку), а не выполнять скрипт в onClick кнопки отправки. Если вам нужно запустить javascript с помощью кнопки, используйте type = "button" вместо type = "submit" - надеюсь, это прояснило, что я имел в виду.
Я не голосовал против, но у меня проблемы с анализом последнего предложения. ("никогда ничего не делайте onClick кнопки отправки, но всегда делайте это в ... кнопке onClick" ???)
Возможно, вы захотите включить фиктивный скрытый элемент ввода, чтобы воссоздать ситуацию, когда у вас было два элемента ввода ... таким образом вы получите оба события
<FORM onSubmit = "{alert('form::onSubmit'); return false;}">
<INPUT TYPE = "text">
<input type = "hidden" name = "dummy">
<INPUT TYPE = "submit" onClick = "{alert('buttom::onClick');}">
</FORM>
В IE есть много запутанных исправлений, которые необходимо сделать для улучшения совместимости нашего кода.
Этот вопрос решает эту проблему: Клавиша ENTER в ФОРМЕ с одним полем ввода автоматически отправит ОТПРАВИТЬ с помощью GET.