Отправка формы нажатием кнопки ввода без кнопки отправки.

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

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

22 ответа

Решение

Пытаться:

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

Я думаю, вы должны пойти по пути 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>

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

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

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

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

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

});

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

например

<input type="submit" hidden />

Используйте следующий код, это решило мою проблему во всех 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"/>

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

Просто установите для скрытого атрибута значение 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>

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

Самый элегантный способ сделать это - сохранить кнопку submit, но установить для нее border, padding и font-size значение 0.

Это сделает размеры кнопки 0x0.

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

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

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

JS Fiddle

<input type="submit" style="display:none;"/>

Это прекрасно работает, и это самая явная версия того, что вы пытаетесь достичь.

Обратите внимание, что есть разница между display:none а также visibility:hidden для других элементов формы.

HTML5 решение

<input type="submit" hidden />

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

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

Я работаю с множеством UI-фреймворков. Многие из них имеют встроенный класс, который можно использовать для визуального скрытия вещей.

Бутстрап

<input type="submit" class="sr-only" tabindex="-1">

Угловой материал

<input type="submit" class="cdk-visually-hidden" tabindex="-1">

Блестящие умы, создавшие эти рамки, определили эти стили следующим образом:

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.cdk-visually-hidden {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
    outline: 0;
    -webkit-appearance: none;
    -moz-appearance: none;
}

Самый простой способ

<input type="submit" style="width:0px; height:0px; opacity:0;"/>

Это мое решение, протестированное в Chrome, Firefox 6 и IE7+:

.hidden{
    height: 1px;
    width: 1px;
    position: absolute;
    z-index: -100;
}
input.on('keypress', function(event) {
    if ( event.which === 13 ) {
        form.submit();
        return false;
    }
});

Для тех, у кого проблемы с IE и для других тоже.

{
    float: left;
    width: 1px;
    height: 1px;
    background-color: transparent;
    border: none;
}

Вы также можете попробовать это

<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">

Вы можете включить изображение с шириной / высотой = 0 пикселей

Я добавил его в функцию готового документа. Если в форме нет кнопки отправки (все мои диалоговые формы Jquery не имеют кнопок отправки), добавьте ее.

$(document).ready(function (){
    addHiddenSubmitButtonsSoICanHitEnter();
});
function addHiddenSubmitButtonsSoICanHitEnter(){
    var hiddenSubmit = "<input type='submit' style='position: absolute; left: -9999px; width: 1px; height: 1px;' tabindex='-1'/>";
    $("form").each(function(i,el){
        if($(this).find(":submit").length==0)
            $(this).append(hiddenSubmit);
    });
}

Современный ответ на 2023 год и далее

Остальные ответы старые или используют jquery (который также устарел и не должен использоваться в современных приложениях). keyCode также устарел и не должен использоваться.

      <form id="myform">
  <input type="text" id="q" name="q" placeholder="Search...">
</form>

<script>
document.querySelector('#id').addEventListener('keydown', (event) => {
  if(event.key === 'Enter'){
    document.querySelector('#myform').submit()
    return false
  }
})
</script>

Я использовал

< input class="hidden" type="submit" value="" 
onclick="document.getElementById('loginform').submit()"; />

а также

 .hidden {
        border:0;
        padding:0;
        font-size:0;
        width: 0px;
        height: 0px;
    }

в файле.css. У меня это тоже получалось волшебно.:)

Вот код, который сработал для меня, уверен, что он поможет вам

      <form name="loginBox" target="#here" method="post">
  <input name="username" type="text" /><br />
  <input name="password" type="password" />
  <input type="submit" />
</form>

<script type="text/javascript">
  $(function () {
    $("form").each(function () {
      $(this)
        .find("input")
        .keypress(function (e) {
          if (e.which == 10 || e.which == 13) {
            this.form.submit();
          }
        });
      $(this).find("input[type=submit]").hide();
    });
  });
</script>
Другие вопросы по тегам