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

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

Поведение ключевого слова "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) для оценки ваших знаний,...
85
0
227 493
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

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

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

Pierre Henry 06.10.2010 18:12

Вот как я это делаю с помощью 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 27.08.2008 17:14

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

<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>

Для каждого поля, которое должно отправить форму, когда пользователь нажимает клавишу ввода, вызовите функцию 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>

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

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

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

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

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

Похоже, блокировщик всплывающих окон firefox ловит это = |.

John 09.08.2013 05:22

Я предпочитаю «клавиатуру», чтобы удерживание клавиши ввода не срабатывало одновременно.

Justin Skiles 23.09.2015 18:57
Ответ принят как подходящий

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

<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 из СтриптизВоин.

Описанный выше способ не работает в IE. IE игнорирует скрытую кнопку отправки.

Chuck Phillips 20.07.2010 22:39

@ChuckPhillips В ответ добавлен новый пример, который также должен корректно работать в IE.

Chris Marasti-Georg 10.10.2011 18:39

Я пробовал это в Safari (5.1.2), и это не сработало. Я просто остаюсь на той же странице. Я пробовал убрать стиль "display: none". И это сработало! Кажется, Safari нужно, чтобы кнопка отправки была видна.

user213265 06.02.2012 17:42

Не работает и в Chrome версии 19.0.1084.56 - для работы должна быть видна кнопка отправки. См. Ответ StriplingWarrior ниже, чтобы узнать о надежном исправлении, которое работает в Chrome, Safari и IE.

user2398029 22.06.2012 05:11

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

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

Я пробовал различные стратегии на основе 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 включает язык, чтобы заставить его работать так, как это уже реализовано в большинстве браузеров.

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

Buttons created with the BUTTON element function just like buttons created with the INPUT element, but they offer richer rendering possibilities: the BUTTON element may have content. For example, a BUTTON element that contains an image functions like and may resemble an INPUT element whose type is set to "image", but the BUTTON element type allows content.

В основном есть еще один тег, <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>.

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

//<![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 и других браузеров, совместимых со стандартами.

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

Что делать, если пользователь хочет сдвинуть-ввести новую строку перед отправкой формы?

Gaʀʀʏ 18.09.2012 23:52

Подобно примеру Криса Марасти-Георга, вместо этого используется встроенный 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>

Вопрос не в этом. Цель заключалась в том, чтобы отправить без кнопки отправки ...

jason 02.09.2016 23:32

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

<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).

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

Это уловка!

Вопрос в том, как отправить форму БЕЗ показа на кнопке отправки.

Marco Demaio 07.05.2014 19:58

Поскольку кнопки и входы 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/> по своему желанию.

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

reformed 20.10.2016 21:23

Использование атрибута «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 21.06.2018 12:21

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

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()
  }
}

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