Отправка формы нажатием enter без кнопки отправки
Ну я пытаюсь отправить форму, нажав 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>
который работает довольно хорошо. Кнопка Отправить работает, когда пользователь нажимает enter, и кнопка не отображается в Firefox, IE, Safari, Opera и Chrome. Тем не менее, мне все еще не нравится решение, так как трудно знать, будет ли он работать на всех платформах со всеми браузерами.
может ли кто-нибудь предложить лучший метод? Или это примерно так же хорошо, как он получает?
18 ответов:
попробуй:
<input type="submit" style="position: absolute; left: -9999px"/>
что будет нажимать на кнопку на левом из экрана. Самое приятное в этом то, что вы получите изящную деградацию, когда CSS отключен.
обновление-обходной путь для IE7
как предложил Брайан Даунинг + с
tabindex
чтобы предотвратить tab достичь этой кнопки (по 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; } }); });
используйте следующий код, это исправило мою проблему во всех 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"/>
добавить выше строку в качестве первой строки в коде с соответствующим значением имени и значения.
для тех, кто смотрит на этот ответ в будущем, HTML5 реализует новый атрибут для элементов формы,
hidden
, который будет автоматически применятьdisplay:none
в свой элемент.например
<input type="submit" hidden />
вместо взлома, который вы в настоящее время используете, чтобы скрыть кнопку, было бы намного проще установить
visibility: collapse;
в атрибут стиля. Тем не менее, я бы все равно рекомендовал использовать немного простого Javascript для отправки формы. Насколько я понимаю, поддержка таких вещей сегодня вездесуща.
просто установите скрытый атрибут в 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>
IE не позволяет нажимать клавишу ENTER для отправки формы, если кнопка submit не видна, а форма имеет более одного поля. Дайте ему то, что он хочет, предоставляя прозрачное изображение размером 1x1 пиксель в качестве кнопки отправки. Конечно, это займет пиксель макета, но посмотрите, что вам нужно сделать, чтобы скрыть его.
<input type="image" src="img/1x1trans.gif"/>
самый элегантный способ сделать это-сохранить кнопку отправки, но установить ее границы, отступы и размер шрифта в 0.
это сделает размер кнопки 0x0.
<input type="submit" style="border:0; padding:0; font-size:0">
вы можете попробовать это самостоятельно, и, установив контур элемента, вы увидите точку, которая является внешней границей, "окружающей" элемент 0x0 px.
нет необходимости в видимости: скрыто, но если это заставляет вас спать по ночам, вы можете бросить это в микс, как что ж.
Это мое решение, протестированное в Chrome, Firefox 6 и IE7+:
.hidden{ height: 1px; width: 1px; position: absolute; z-index: -100; }
для тех у кого проблемы с 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 px
Я добавил его в функцию на документ готов. Если в форме нет кнопки отправки (все мои диалоговые формы 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); }); }
<input type="submit" style="display:none;"/>
Это прекрасно работает, и это наиболее явная версия, что вы пытаетесь достичь.
обратите внимание, что есть разница между
display:none
иvisibility:hidden
для других элементов формы.