现在,表单看起来像这样:
<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中不显示。但是,我仍然不喜欢该解决方案,因为很难知道它是否可以在所有浏览器的所有平台上正常工作。
谁能提出更好的方法?还是这差不多呢?
#1 楼
试试:<input type="submit" style="position: absolute; left: -9999px"/>
将waaay按钮推向屏幕的左侧。这样做的好处是,当禁用CSS时,您会得到正常的降级。
更新-IE7的解决方法
如Bryan Downing +建议使用
tabindex
来防止制表符到达此按钮(由Ates Goral):<input type="submit"
style="position: absolute; left: -9999px; width: 1px; height: 1px;"
tabindex="-1" />
评论
刚刚在IE7中尝试过此解决方案,结果与Erebus相同。以下代码对其进行了修复:position:absolute;宽度:1px;高度:1px;左:-9999px;
–布莱恩·唐宁(Bryan Downing)
2010年11月3日,凌晨1:01
骇人听闻的骇客:(为什么HTML最初是这样的?在这种情况下,enter是否有充分的理由不起作用?
–́nagon
2011-4-10 7:40
@nornagon:如果您认为此骇客是可怕的,请随时提出一个不太可怕的骇客。 HTML就是它...
– Ates Goral
2011年4月10日在21:07
@MooseFactory tabindex =“-1”
– Ates Goral
2012年7月13日在16:04
“好的是……禁用CSS时的正常降级”?!我的意思是,这确实很好,但是“正常降级”部分只是营销策略。在2002年找到该页面之前,我什至没有听说过。没错,第一页上唯一的Google搜索结果“ css在浏览器中被禁用”是10年前的(或者7认为这个答案是于2009年推出)。
– Vicky Chijwani
13年1月20日在18:31
#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>
评论
不错,经过测试,工作正常。但是在尝试类似的操作之前,请记住,通过Javascript提交表单不会导致某些浏览器提供密码保存功能。
– andyk
09年1月26日在11:35
这将导致“提交”按钮出现一会儿(直到页面加载和JS运行)。
–́nagon
2011-4-10 7:34
也将触发按键以从自动完成中进行选择,即,如果用户正在输入电子邮件地址,并且他/她通过点击Enter从浏览器的自动完成中选择了先前给定的一个,则您的表单将提交。不是您的用户所期望的。
–汉堡
2012年3月11日上午10:08
我从按键切换到按键,以获得更广泛的支持,但您还需要添加e.preventDefault();。如果您希望支持Chrome,请在此之前。
–坎贝尔
2015年2月9日在2:54
@Campbeln,您可以改为使用.on('keypress'...)。 .on()的文档看起来像是为您执行了.preventDefault()调用。
– jinglesthula
16年11月18日在22:09
#3 楼
您尝试过吗?<input type="submit" style="visibility: hidden;" />
由于大多数浏览器都了解
visibility:hidden
,但它实际上并不像display:none
一样工作,我想这应该没问题。我自己还没有真正测试过它,所以CMIIW。评论
关于可见性,只有一件事:隐藏:在w3schools中可以看到,可见性:没有任何东西会影响布局。如果要避免此空格,则绝对定位的解决方案对我来说似乎更好。
–loybert
2012年9月28日15:32
您可以组合使用两种解决方案:
– VaclavSir
2013年12月11日下午14:27
该死,这在IE8中不起作用(它不提交表单),因此上述解决方案胜出:position:absolute;左:-100px;宽度:1px;高度:1px;
– VaclavSir
2013年12月11日15:27
#4 楼
另一个没有提交按钮的解决方案:HTML
<form>
<input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>
$(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;
}
});
});
评论
奇怪的把戏。您将按钮放入文本框!但是,由于该技巧适用于所有浏览器,因此我功劳了!
–珍娜·叶
16年5月17日在13:49
谢谢@JennaLeaf ;-)无论如何,我认为这不是很奇怪-许多在线表单都用作提交按键的简单“触发”。一个示例可能是google搜索栏(也许他们不完全使用此代码,但可能类似)。
– daamoiser
16年5月17日在14:13
#5 楼
对于以后希望看到此答案的任何人,HTML5都为表单元素实现了新属性hidden
,它将自动将display:none
应用于您的元素。例如
<input type="submit" hidden />
评论
尽管它似乎可以与台式机Chrome一起使用,但似乎不适用于iPhone上的Chrome或Safari。
–乌尔·亚当斯(Ulf Adams)
18年8月21日在13:25
@UlfAdams它可与iPhone 12.1.2上的Chrome和Safari一起使用。
–马修·坎贝尔
19年2月6日在16:59
#6 楼
使用以下代码,可以解决所有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 楼
只需将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>
评论
隐藏的属性将通过按Enter禁用提交。
– 66Ton99
2013年9月23日上午8:11
@ 66Ton99只需在FF中测试。它不会禁用提交
– Eugen Konkov
17年1月10日在18:13
“它在我的机器上工作”;)浏览器比firefox多得多。可以说,人们需要一种能够跨浏览器可靠运行的解决方案。
–FélixGagnon-Grenier
17年6月12日在20:40
适用于Chrome 63
–piotr_cz
18年1月19日在20:21
目前无法在iPhone上的Chrome或Safari中使用。
–乌尔·亚当斯(Ulf Adams)
18年8月21日在13:28
#8 楼
代替您当前用来隐藏按钮的技巧,在style属性中设置visibility: collapse;
会容易得多。但是,我仍然建议使用一些简单的Javascript提交表单。据我了解,如今对此类事物的支持无处不在。#9 楼
最优雅的方法是保留提交按钮,但将其边框,填充和字体大小设置为0。这将使按钮尺寸为0x0。
<input type="submit" style="border:0; padding:0; font-size:0">
您可以自己尝试,通过为元素设置轮廓,您将看到一个点,该点是“包围” 0x0 px元素的外部边框。
不需要可见性:隐藏,但是如果它使您晚上入睡,也可以将其放入混合中。
JS Fiddle
#10 楼
如果“提交”按钮不可见,并且表单有多个字段,则IE不允许按ENTER键提交表单。提供1x1像素的透明图像作为提交按钮,以提供所需的内容。当然,它会占用布局的一个像素,但请注意隐藏它所要做的事情。<input type="image" src="img/1x1trans.gif"/>
#11 楼
<input type="submit" style="display:none;"/>
这很好用,它是您要实现的最明确的版本。
请注意,
display:none
和visibility:hidden
在其他表单元素之间存在差异。#12 楼
这是我的解决方案,已经在Chrome,Firefox 6和IE7 +中进行了测试:.hidden{
height: 1px;
width: 1px;
position: absolute;
z-index: -100;
}
评论
似乎IE8不喜欢position:absolute,它不提交。
– maxxyme
2014年7月9日在17:18
#13 楼
最简单的方法<input type="submit" style="width:0px; height:0px; opacity:0;"/>
#14 楼
HTML5解决方案<input type="submit" hidden />
评论
与上述相同-不适用于iPhone上的Chrome或Safari。
–乌尔·亚当斯(Ulf Adams)
18年8月21日在13:30
#15 楼
我使用大量的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;
}
#16 楼
对于那些有IE问题的人和其他人。{
float: left;
width: 1px;
height: 1px;
background-color: transparent;
border: none;
}
评论
我仍将使用position:absolute,float影响布局。
–超级鸭
2014年4月30日在6:50
似乎IE8不喜欢position:absolute,它不提交。我用:
– maxxyme
2014年7月9日在17:15
与float:left相同;删除后将提交。
– maxxyme
2014年7月9日在17:38
#17 楼
您也可以尝试<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">
您可以添加宽度/高度= 0 px的图像
评论
重要提示:您必须使用有效的图片网址,否则Firefox将在页面上显示“提交查询”文本
– PH。
2012年12月12日下午16:45
如果添加现有的图像并将高度和宽度设置为零,或者添加不存在的图像,则浏览器将不得不对资源进行浪费的GET请求。
– pwdst
13年5月12日在16:35
#18 楼
我将其添加到文档准备就绪的功能中。如果表单上没有提交按钮(我的所有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);
});
}
#19 楼
input.on('keypress', function(event) {
if ( event.which === 13 ) {
form.submit();
return false;
}
});
#20 楼
这是对我有用的代码,可以确保对您有所帮助 <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>
#21 楼
我曾经在.css文件中使用过<input class="hidden" type="submit" value=""
onclick="document.getElementById('loginform').submit();"/>
和:
.hidden {
border:0;
padding:0;
font-size:0;
width: 0px;
height: 0px;
}
。
它对我来说也神奇。 :)
评论
小点可能会减少CSS上的几个字符,通常会自动成为缩小符-您不需要零长度测量单位。 0px = 0pt = 0em = 0em等。@pwdst感谢您指出这一点-我来自Python界,因此“显式优于隐式”,并真的想知道CSS是否是这种情况,或者CSS创建者是否有其他习惯用法?
零是这里规则的例外@ericmjl-0px == 0em == 0%== 0vh == 0vh等。在其他(非零)长度测量中,这不仅是不习惯的做法,而且违反不指定单位和单位的标准您会看到用户代理(浏览器)中行为的变化。请参阅developer.mozilla.org/zh-CN/docs/Web/CSS/length和drafts.csswg.org/css-values-3/#lengths
如有疑问,请使用明确的长度单位。
虽然将单位加0当然不会有什么坏处,但是无论哪种语言,任何单位都不应该是100%有效的,实际上一直到数学抽象。 OTOH,“拥有”与“不拥有”的一种方便用法是传达以下信息:给定属性是否“真的是要设为0,并保持这种状态”(无单位),而不是“现在正好是零,但可以根据口味进行调整;或其他...”(带单位)。