Отправка формы нажатием кнопки ввода без кнопки отправки. - PullRequest
293 голосов
/ 25 января 2009

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

Прямо сейчас форма выглядит так:

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>

Который работает довольно хорошо. Кнопка отправки работает, когда пользователь нажимает ввод, и кнопка не отображается в Firefox, IE, Safari, Opera и Chrome. Однако мне все еще не нравится это решение, поскольку трудно понять, будет ли оно работать на всех платформах со всеми браузерами.

Кто-нибудь может предложить лучший метод? Или это примерно так хорошо, как это получается?

Ответы [ 18 ]

225 голосов
/ 25 января 2009

Попробуйте:

<input type="submit" style="position: absolute; left: -9999px"/>

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

Обновление - Обходной путь для IE7

В соответствии с предложением Брайана Даунинга + с tabindex, чтобы не дать табу достигнуть этой кнопки (по Ates Goral):

<input type="submit" 
       style="position: absolute; left: -9999px; width: 1px; height: 1px;"
       tabindex="-1" />
93 голосов
/ 25 января 2009

Я думаю, вы должны пойти по Javascript или, по крайней мере, я бы:

<script type="text/javascript">
// Using jQuery.

$(function() {
    $('form').each(function() {
        $(this).find('input').keypress(function(e) {
            // Enter pressed?
            if(e.which == 10 || e.which == 13) {
                this.form.submit();
            }
        });

        $(this).find('input[type=submit]').hide();
    });
});
</script>


<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" />
</form>
75 голосов
/ 25 января 2009

Вы пробовали это?

<input type="submit" style="visibility: hidden;" />

Так как большинство браузеров понимают visibility:hidden и оно не работает как display:none, я предполагаю, что все должно быть хорошо. Сам не проверял, так что CMIIW.

27 голосов
/ 02 ноября 2013

Другое решение без кнопки отправки:

HTML

<form>
  <input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>

JQuery

$(document).ready(function() {

  $('.submit_on_enter').keydown(function(event) {
    // enter has keyCode = 13, change it if you want to use another button
    if (event.keyCode == 13) {
      this.form.submit();
      return false;
    }
  });

});
14 голосов
/ 04 апреля 2017

Для тех, кто ищет этот ответ в будущем, HTML5 реализует новый атрибут для элементов формы, hidden, который автоматически применяет display:none к вашему элементу.

, например

<input type="submit" hidden />
13 голосов
/ 14 ноября 2011

Используйте следующий код, это решило мою проблему во всех 3 браузерах (FF, IE и Chrome):

<input  type="submit" name="update" value=" Apply " 
    style="position: absolute; height: 0px; width: 0px; border: none; padding: 0px;"
    hidefocus="true" tabindex="-1"/>

Добавьте строку выше в качестве первой строки в вашем коде с соответствующим значением имени и значения.

7 голосов
/ 03 апреля 2013

Просто установите для скрытого атрибута значение true:

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" hidden="true" />
</form>
7 голосов
/ 25 января 2009

Вместо хака, который вы сейчас используете для скрытия кнопки, было бы намного проще установить visibility: collapse; в атрибуте стиля. Тем не менее, я бы по-прежнему рекомендовал использовать немного простого Javascript для отправки формы. Насколько я понимаю, поддержка таких вещей сегодня повсеместна.

6 голосов
/ 20 июня 2016

Самый элегантный способ сделать это - удерживать кнопку отправки, но установить ее границу, отступ и размер шрифта равными 0.

Размер кнопки будет 0x0.

<input type="submit" style="border:0; padding:0; font-size:0">

Вы можете попробовать это сами, и, установив контур элемента, вы увидите точку, которая является внешней границей, "окружающей" элемент пикселя 0x0.

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

JS Fiddle

5 голосов
/ 13 июня 2014

IE не позволяет нажимать клавишу ВВОДА для отправки формы, если кнопка отправки не видна, а форма имеет более одного поля. Дайте ему то, что он хочет, предоставив прозрачное изображение размером 1x1 пиксель в качестве кнопки отправки. Конечно, это займет пиксель макета, но посмотрите, что вы должны сделать, чтобы скрыть его.

<input type="image" src="img/1x1trans.gif"/>
...