Отправка формы нажатием кнопки без кнопки отправки
Ну, я пытаюсь отправить форму, нажав кнопку ввода, но не отображая кнопку отправки. Я не хочу входить в 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. Тем не менее, мне все еще не нравится решение, так как трудно понять, будет ли он работать на всех платформах со всеми браузерами.
Может ли кто-нибудь предложить лучший метод? Или это примерно так же хорошо, как и получается?
Ответы
Ответ 1
Try:
<input type="submit" style="position: absolute; left: -9999px"/>
Это приведет к нажатию кнопки waaay влево, вне экрана. Самое приятное в этом - вы получите изящное ухудшение при отключении CSS.
Обновление - временное решение для IE7
Как предложил Брайан Даунинг + с помощью tabindex
, чтобы предотвратить нажатие этой кнопки (Атесом Горалом):
<input type="submit"
style="position: absolute; left: -9999px; width: 1px; height: 1px;"
tabindex="-1" />
Ответ 2
Я думаю, вам нужно идти по 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>
Ответ 3
Вы пробовали это?
<input type="submit" style="visibility: hidden;" />
Так как большинство браузеров понимают visibility:hidden
, и это действительно не работает как display:none
, я предполагаю, что все должно быть хорошо. Я действительно не тестировал его, поэтому CMIIW.
Ответ 4
Другое решение без кнопки отправки:
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;
}
});
});
Ответ 5
Используйте следующий код, это устранило мою проблему во всех трех браузерах (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"/>
Добавьте строку выше в качестве первой строки в вашем коде с соответствующим значением имени и значения.
Ответ 6
Вместо того, что вы сейчас используете, чтобы скрыть кнопку, было бы гораздо проще установить visibility: collapse;
в атрибуте style. Тем не менее, я бы порекомендовал использовать немного простого Javascript для отправки формы. Насколько я понимаю, поддержка таких вещей сегодня вездесуща.
Ответ 7
Просто установите для скрытого атрибута значение 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>
Ответ 8
IE не позволяет нажимать клавишу ENTER для отправки формы, если кнопка отправки не видна, а форма имеет более одного поля. Дайте ему то, что он хочет, предоставив прозрачное изображение размером 1x1 пиксель в качестве кнопки отправки. Конечно, это займет пиксель макета, но посмотрите, что вам нужно сделать, чтобы скрыть его.
<input type="image" src="img/1x1trans.gif"/>
Ответ 9
Это мое решение, протестированное в Chrome, Firefox 6 и IE7 +:
.hidden{
height: 1px;
width: 1px;
position: absolute;
z-index: -100;
}
Ответ 10
Самый элегантный способ сделать это - сохранить кнопку отправки, но установите для нее границу, отступы и размер шрифта до 0.
Это сделает размеры кнопки 0x0.
<input type="submit" style="border:0; padding:0; font-size:0">
Вы можете попробовать это самостоятельно, и, установив контур элемента, вы увидите точку, которая является внешней границей, окружающей элемент 0x0 px.
Нет необходимости в видимости: скрытый, но если он заставляет вас спать по ночам, вы можете бросить это в миксе.
JS Fiddle
Ответ 11
самый простой способ
<input type="submit" style="width:0px; height:0px; opacity:0;"/>
Ответ 12
Вы также можете попробовать это
<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">
Вы можете включить изображение с шириной/высотой = 0 px
Ответ 13
Для тех, у кого есть проблемы с IE и другими.
{
float: left;
width: 1px;
height: 1px;
background-color: transparent;
border: none;
}
Ответ 14
Для тех, кто смотрит на этот ответ в будущем, HTML5 реализует новый атрибут для элементов формы hidden
, который автоматически применит display:none
к вашему элементу.
например.
<input type="submit" hidden />
Ответ 15
Я добавил его к функции на готовом документе. Если в форме нет кнопки отправки (все мои формы Jquery Dialog не имеют кнопок отправки), добавьте ее.
$(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);
});
}
Ответ 16
<input type="submit" style="display:none;"/>
Это прекрасно работает, и это самая явная версия того, чего вы пытаетесь достичь.
Обратите внимание, что существует разница между display:none
и visibility:hidden
для других элементов формы.
Ответ 17
Я использовал
< input class="hidden" type="submit" value=""
onclick="document.getElementById('loginform').submit()"; />
и
.hidden {
border:0;
padding:0;
font-size:0;
width: 0px;
height: 0px;
}
в файле .css.
Для меня это тоже помогло.:)