Как отправить форму при нажатии клавиши возврата?

84

Может кто-нибудь сказать мне, как отправить HTML-форму при нажатии клавиши возврата и если в форме нет кнопок? Кнопки отправки нет . Вместо этого я использую собственный div.

Нияз
источник

Ответы:

61

ИМО, это самый чистый ответ:

<form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input type="submit" style="display:none"/>
</form>

Еще лучше, если вы используете javascript для отправки формы с помощью настраиваемого div, вам также следует использовать javascript для его создания и для установки стиля display: none на кнопке. Таким образом, пользователи с отключенным javascript будут по-прежнему видеть кнопку отправки и могут нажимать на нее.


Было отмечено, что display: none заставит IE игнорировать ввод. Я создал новый пример JSFiddle, который начинается как стандартная форма и использует прогрессивные улучшения, чтобы скрыть отправку и создать новый div. Я использовал стили CSS от StriplingWarrior .

Крис Марасти-Георг
источник
7
Описанный выше способ не работает в IE. IE игнорирует скрытую кнопку отправки.
Chuck Phillips
@ChuckPhillips В ответ добавлен новый пример, который также должен корректно работать в IE.
Крис Марасти-Георг
1
Я пробовал это в Safari (5.1.2), и это не сработало. Я просто остаюсь на той же странице. Я пробовал убрать стиль "display: none". И это сработало! Кажется, Safari нужно, чтобы кнопка отправки была видна.
3
Не работает и в Chrome версии 19.0.1084.56 - для работы должна быть видна кнопка отправки. См. Ответ StriplingWarrior ниже, чтобы узнать о надежном исправлении, которое работает в Chrome, Safari и IE.
user2398029
87

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

function checkSubmit(e) {
   if(e && e.keyCode == 13) {
      document.forms[0].submit();
   }
}

Затем добавьте событие в любую область, которая вам нужна, например, в теге div:

<div onKeyPress="return checkSubmit(event)"/>

В любом случае, это также поведение по умолчанию Internet Explorer 7 (возможно, и более ранних версий).

Джон Хантер
источник
1
Похоже, блокировщик всплывающих окон firefox ловит это = |.
Джон
4
Я предпочитаю "клавиатуру", чтобы удерживание клавиши ввода не срабатывало одновременно.
Джастин Скилс,
54

Я пробовал различные стратегии на основе javascript / jQuery, но проблемы продолжались. Последняя возникшая проблема связана со случайной отправкой, когда пользователь использует клавишу ввода для выбора из встроенного в браузер списка автозаполнения. В конце концов я переключился на эту стратегию, которая, похоже, работает во всех браузерах, поддерживаемых моей компанией:

<div class="hidden-submit"><input type="submit" tabindex="-1"/></div>
.hidden-submit {
    border: 0 none;
    height: 0;
    width: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
}

Это похоже на принятый в настоящее время ответ Криса Марасти-Георга, но, если его избегать display: none, он работает правильно во всех браузерах.

Обновить

Я отредактировал приведенный выше код, чтобы включить отрицательный, tabindexчтобы он не фиксировал клавишу табуляции. Хотя технически это не подтверждается в HTML 4, спецификация HTML5 включает язык, чтобы заставить его работать так, как это уже реализовано в большинстве браузеров.

СтриптизВоин
источник
14

Используйте <button>тег. Из стандарта W3C:

Кнопки, созданные с помощью элемента BUTTON, работают так же, как кнопки, созданные с помощью элемента INPUT, но они предлагают более широкие возможности визуализации: элемент BUTTON может иметь содержимое. Например, элемент BUTTON, содержащий изображение, функционирует как и может напоминать элемент INPUT, тип которого установлен на «изображение», но тип элемента BUTTON допускает содержимое.

В основном есть другой тег, <button>который не требует javascript , который также может отправлять форму. Его можно стилизовать во многом как <div>тег (в том числе <img />внутри тега кнопки). Кнопки из <input />тега не такие гибкие.

<button type="submit">
    <img src="my-icon.png" />
    Clicking will submit the form
</button>

Можно установить три типа <button>; они соответствуют <input>типам кнопок.

<button type="submit">Will submit the form</button>
<button type="reset">Will reset the form</button>
<button type="button">Will do nothing; add javascript onclick hooks</button>

Стандарты

я использую <button> теги с и немного стилизация для получения красочных и функциональных кнопок формы. Обратите внимание, что можно написать css, например, для <a class="button">общих ссылок на стили с <button>элементом.

Джоэл Пурра
источник
9

Я считаю, что это то, что вы хотите.

//<![CDATA[

//Send form if they hit enter.
document.onkeypress = enter;
function enter(e) {
  if (e.which == 13) { sendform(); }
}

//Form to send
function sendform() {
  document.forms[0].submit();
}
//]]>

Каждый раз при нажатии клавиши вызывается функция enter (). Если нажатая клавиша совпадает с клавишей ввода (13), то будет вызвана sendform () и будет отправлена ​​первая встреченная форма. Это только для Firefox и других браузеров, соответствующих стандартам.

Если вы найдете этот код полезным, не забудьте проголосовать за меня!

Ястреб
источник
1
Что, если пользователь хочет сдвинуть-ввести новую строку перед отправкой формы?
Gaʀʀʏ
7

Вот как я это делаю с помощью jQuery

j(".textBoxClass").keypress(function(e)
{
    // if the key pressed is the enter key
    if (e.which == 13)
    {
        // do work
    }
});

Другой javascript не будет слишком отличаться. ловушка проверяет аргумент нажатия клавиши «13», который является клавишей ввода

Шон Чемберс
источник
Я использую ответ @ [Sean] (# 29951) в своем коде, за исключением того, что обнаружил, что мне тоже нужно уловить e.which == 10.
Travis
6

Используйте следующий сценарий.

<SCRIPT TYPE="text/javascript">
<!--
    function submitenter(myfield,e)
    {
        var keycode;
        if (window.event) keycode = window.event.keyCode;
        else if (e) keycode = e.which;
        else return true;

        if (keycode == 13)
        {
            myfield.form.submit();
            return false;
        }
        else
            return true;
    }
//-->
</SCRIPT>

Для каждого поля, которое должно отправить форму, когда пользователь нажимает Enter, вызовите функцию submitenter следующим образом.

<FORM ACTION="../cgi-bin/formaction.pl">
    name:     <INPUT NAME=realname SIZE=15><BR>
    password: <INPUT NAME=password TYPE=PASSWORD SIZE=10
       onKeyPress="return submitenter(this,event)"><BR>
<INPUT TYPE=SUBMIT VALUE="Submit">
</FORM>
Билл Ящерица
источник
2

Я использую такой способ:

<form name='test' method=post action='sendme.php'>
    <input type=text name='test1'>
    <input type=button value='send' onClick='document.test.submit()'>
    <input type=image src='spacer.gif'>  <!-- <<<< this is the secret! -->
</form>

По сути, я просто добавляю невидимый ввод типа image (где " spacer.gif » - это прозрачный gif размером 1x1).

Таким образом, я могу отправить эту форму либо с помощью кнопки «отправить», либо просто нажав клавишу ввода на клавиатуре.

Это уловка!

Niente
источник
1
Вопрос в том, как отправить форму БЕЗ кнопки отправки.
Марко Демайо
0

Почему бы вам просто не применить стили отправки div к кнопке отправки? Я уверен, что для этого есть javascript, но так будет проще.

Росс
источник
У меня такая же проблема с использованием кнопок jQUery UI. С помощью этих виджетов у вас есть возможность добавить к кнопке симпатичный маленький значок (или даже два, если хотите). Но этот вариант не работает, если вы используете тег ввода в качестве кнопки отправки. Итак, вам нужно использовать a, или span или div.
Пьер Анри,
0

Если вы используете asp.net, вы можете использовать атрибут defaultButton в форме.

Корин Блейки
источник
0

Я думаю, у вас действительно должна быть кнопка отправки или изображение отправки ... У вас есть конкретная причина для использования «отправить div»? Если вам просто нужны индивидуальные стили, я рекомендую <input type="image".... http://webdesign.about.com/cs/forms/a/aaformsubmit_2.htm

Palotasb
источник
0

Продолжая ответы, это то, что у меня сработало, может быть, кому-то это пригодится.

HTML

<form method="post" action="/url" id="editMeta">
   <textarea class="form-control" onkeypress="submitOnEnter(event)"></textarea>
</form>

Js

function submitOnEnter(e) {
  if (e.which == 13) {
    document.getElementById("editMeta").submit()
  }
}
ебать
источник
-1

Подобно примеру Криса Марасти-Георга, вместо этого используется встроенный javascript. По сути, добавьте onkeypress в поля, с которыми должна работать клавиша ввода. В этом примере действует поле пароля.

<html>
<head><title>title</title></head>
<body>
  <form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password" onkeypress="if(event.keyCode==13) {javascript:form.submit();}" /><br/>
  <input type="submit" onClick="javascript:form.submit();"/>
</form>
</body>
</html>
denn
источник
Вопрос не в этом. Цель заключалась в том, чтобы отправить без кнопки отправки ...
Джейсон
-1

Поскольку display: noneкнопки и вводы не работают в Safari и IE, я обнаружил, что самый простой способ, не требующий дополнительных взломов javascript , - это просто добавить в форму абсолютно позиционированный <button />элемент и разместить его далеко за пределами экрана.

<form action="" method="get">
  <input type="text" name="name" />
  <input type="password" name="password" />
  <div class="yourCustomDiv"/>
  <button style="position:absolute;left:-10000px;right:9990px"/>
</form>

Это работает в текущей версии всех основных браузеров по состоянию на сентябрь 2016 года.

Очевидно, что рекомендуется (и более семантически правильно) просто стилизовать по <button/>желанию.

AndrewH
источник
Вы подчеркиваете отсутствие взлома JavaScript, но при этом представляете взлом CSS.
реформирована
-2

Использование атрибута «autofocus» по умолчанию дает кнопке фокус ввода. Фактически, щелчок по любому элементу управления в форме также дает фокус форме, что является требованием для реакции формы на RETURN. Таким образом, «автофокус» сделает это за вас, если пользователь никогда не нажимал на какой-либо другой элемент управления в форме.

Итак, «автофокус» имеет решающее значение, если пользователь никогда не нажимал ни на один из элементов управления формы до нажатия RETURN.

Но даже в этом случае для работы без JS необходимо выполнить 2 условия:

а) вы должны указать страницу, на которую нужно перейти (если оставить пустую, работать не будет). В моем примере это hello.php

б) элемент управления должен быть видимым. Вы могли бы переместить его со страницы, чтобы скрыть, но вы не можете использовать display: none или visibility: hidden. Что я сделал, так это использовал встроенный стиль, чтобы просто переместить его со страницы влево на 200 пикселей. Я сделал высоту 0px, чтобы она не занимала места. Потому что в противном случае он все еще может нарушить другие элементы управления сверху и снизу. Или вы также можете плавать элемент.

<form action="hello.php" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input autofocus type="submit" style="position:relative; left:-200px; height:0px;" />
</form>
realtimeguy
источник
не мог бы участник, проголосовавший против, сообщить мне, что вызывает возражения в моем решении?
realtimeguy