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

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

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

  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>
12.08.2008 23:01:10
lawnsea 7.07.2010 15:26:42
6 ОТВЕТОВ

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

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

1
12.08.2008 23:43:34

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

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

4
13.08.2008 00:08:17

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

1
22.08.2008 16:09:58

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

1
22.08.2008 16:13:05

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

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

3
4.10.2010 13:45:15
Я не понизил голос, но у меня проблемы с анализом последнего предложения. («Никогда не делай ничего на клике кнопки отправки, но всегда делай это в ... кнопке на клике» ???)
Tim Pietzcker 4.10.2010 12:24:03

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

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

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

0
3.03.2016 14:52:38