Первая input type="submit"
/ "image"
/ button type="submit"
в форме - это кнопка отправки по умолчанию.
Если кнопка, которую вы хотите использовать по умолчанию, не должна появляться сначала на странице, затем переместите ее, например, с помощью. плавает или позиционирование. Или, если это нецелесообразно, просто используйте дополнительную фиктивную кнопку отправки в качестве первой вещи в форме, используя position: absolute; left: -lots
, чтобы сделать ее фактически невидимой. (Вы можете использовать tabindex
, чтобы остановить его в обычном порядке табуляции; не используйте display: none
или visibility: hidden
, как в некоторых браузерах, которые останавливают кнопку, рассматриваемую по умолчанию.) Поймайте кнопку по умолчанию / отправить действие из события form.onsubmit
и любых других кнопок, отличных от заданных по умолчанию, в свои собственные события onclick
.
Это немного уродливый хак, и, конечно, очень жаль, что HTML не может естественным образом изменить кнопку по умолчанию, но вам гораздо лучше использовать здесь поведение собственного браузера, чем пытаться заменить его скриптом, что хитрее, чем вы думаете. Есть много забавных маленьких поведений браузера, которые могут сбить вас с толку.
Например, если вы решите перехватить нажатие клавиши Enter, вы можете получить нежелательные события Enter от пользователей, использующих IME. Ввод нажатий клавиш на input type="button"
или textarea
обычно не должен вызывать отправку. Введите нажатие клавиши на select
, вероятно, следует, за исключением случаев, когда клавиатура используется для навигации по раскрывающемуся списку (и вы не можете точно сказать, когда это произошло). Что если неполярный элемент внутри формы сфокусируется и нажата Enter? Вы не поймете это, и в некоторых браузерах это приведет к отправке формы, без вмешательства вашего кода, в любом случае заканчивая кнопкой по умолчанию. Значит ли Shift-Enter или Ctrl-Enter отправить в текстовом поле? в текстовой области? Проверяет ли Enter флажок, отправляет форму или и то, и другое? ...
Браузеры имеют здесь немного различное поведение; вы сойдете с ума, пытаясь покрыть каждую последнюю маленькую возможность, и все, что вы решите, вероятно, пойдет против ожидаемого поведения пользователя. Пусть вместо этого обрабатывает браузер обычный код отправки формы по умолчанию.