在没有提交按钮的情况下按回车键提交表单

嗯,我试图通过按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浏览器中不会显示该按钮。然而,我仍然不喜欢这个解决方案,因为很难知道它是否适用于所有平台和所有浏览器。

谁能提出一个更好的方法?还是说这已经是最好的结果了?

583861 次浏览

而不是你目前用来隐藏按钮的hack,在style属性中设置visibility: collapse;会简单得多。但是,我仍然建议使用一些简单的Javascript来提交表单。据我所知,现在对这些事情的支持无处不在。

你也可以试试这个

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

你可以包含一个宽度/高度= 0 px的图像

2022年更新:用这个代替

<input type="submit" hidden />

注意-过时的答案
请不要在2021年以上使用position: absolute。建议使用hidden属性。否则,请往下看,选择一个更好、更现代的答案。

试一试:

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

这会把按钮推到屏幕的左边。这样做的好处是,当CSS被禁用时,你会得到优雅的降级。

更新- IE7的解决方案

由Bryan Downing +使用tabindex来防止tab到达此按钮(由Ates Goral):

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

你试过这个吗?

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

由于大多数浏览器都能理解visibility:hidden,而且它并不像display:none那样工作,所以我猜它应该没问题。我还没有亲自测试过,所以CMIIW。

我认为你应该走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>

对于IE有问题的人,也适用于其他人。

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

这是我的解决方案,在Chrome, Firefox 6和IE7+测试:

.hidden{
height: 1px;
width: 1px;
position: absolute;
z-index: -100;
}

使用以下代码,这解决了我在所有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"/>

将上述行添加为代码中的第一行,并使用适当的name和value值。

我把它添加到document ready的函数中。如果表单上没有提交按钮(我所有的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);
});
}

只需要将hidden属性设置为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>

最简单的方法

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

另一个没有提交按钮的解决方案:

超文本标记语言

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


});

如果提交按钮不可见,并且表单有多个字段,IE不允许按ENTER键进行表单提交。通过提供一个1x1像素的透明图像作为提交按钮来满足它的需要。当然,它会占用一个像素的布局,但看看你必须做什么来隐藏它。

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

最优雅的方法是保留提交按钮,但将其边框、填充和字体大小设置为0。

这将使按钮尺寸为0x0。

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

您可以自己尝试,通过设置元素的轮廓,您将看到一个点,这是“包围”0x0 px元素的外部边界。

不需要可见性:隐藏,但如果它让你在晚上睡觉,你也可以把它放在一起。

JS提琴

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

这很好,而且它是你想要达到的最明确的版本。

注意,对于其他表单元素,display:nonevisibility:hidden之间是有区别的。

对于将来看到这个答案的人,HTML5为表单元素实现了一个新属性hidden,它会自动将display:none应用到你的元素上。

如。

<input type="submit" hidden />

HTML5的解决方案

<input type="submit" hidden />

我使用了很多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.on('keypress', function(event) {
if ( event.which === 13 ) {
form.submit();
return false;
}
});

下面是对我有效的代码,相信它会对你有帮助

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