如何在Web页面加载时自动将焦点设置为文本框?
好吧,这一定是非常容易的,但我真的不知道该怎么做。 如何在Web页面加载时自动将焦点设置为文本框?
有没有一个HTML标签来做到这一点,还是必须通过JavaScript来完成?
任何JavaScript书会告诉你不要把处理程序放在这样的body元素上。
我是你使用jQuery的:
$(function() { $("#Box1").focus(); });
或原型:
Event.observe(window, 'load', function() { $("Box1").focus(); });
或纯javascript:
window.onload = function() { document.getElementById("Box1").focus(); };
但请记住,这将取代其他负载处理程序,所以在谷歌查找addLoadEvent()一个安全的方式来追加onload处理程序,而不是取代。
在HTML中,所有表单字段都有一个autofocus
属性 。 在Dive Into HTML 5中有一个很好的教程。 不幸的是,它目前不支持低于10的IE版本。
要使用HTML 5属性并回退到JS选项,请执行以下操作:
<input id="my-input" autofocus="autofocus" /> <script> if (!("autofocus" in document.createElement("input"))) { document.getElementById("my-input").focus(); } </script>
不需要jQuery,onload或事件处理程序,因为JS在HTML元素下面。
编辑:另一个优点是它可以在某些浏览器中closuresJavaScript,并且您可以在不想支持旧浏览器的情况下删除JavaScript。
编辑2:Firefox 4现在支持autofocus
属性,只是离开IE不支持。
你需要使用javascript:
<BODY onLoad="document.getElementById('myButton').focus();">
@Ben指出,你不应该添加这样的事件处理程序。 虽然这是另一个问题,他build议你使用这个function:
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } }
然后在您的页面上调用addLoadEvent,并引用一个函数,将焦点设置为您所需的文本框。
使用普通的香草html和javascript
<input type='text' id='txtMyInputBox' /> <script language='javascript' type='text/javascript'> function SetFocus() { // safety check, make sure its a post 1999 browser if (!document.getElementById) { return; } var txtMyInputBoxElement = document.getElementById("txtMyInputBox"); if (txtMyInputBoxElement != null) { txtMyInputBoxElement.focus(); } } SetFocus(); </script>
对于那些使用.net框架和asp.net 2.0或更高版本的人来说,它是微不足道的。 如果你使用的是旧版本的框架,你需要写一些类似于上面的JavaScript。
在您的OnLoad处理程序中(如果使用visual studio提供的库存页面模板,通常是page_load),您可以使用:
C#
protected void PageLoad(object sender, EventArgs e) { Page.SetFocus(txtMyInputBox); }
VB.NET
Protected Sub PageLoad(sender as Object, e as EventArgs) Page.SetFocus(txtMyInputBox) End Sub
(*注意我从函数名称中删除了下划线字符,通常是Page_Load,因为它在代码块中拒绝正确呈现!我在标记文档中看不到如何使下划线呈现未转义状态。
希望这可以帮助。
你可以通过以这种方式使用jquery轻松完成:
<script type="text/javascript"> $(document).ready(function () { $("#myTextBoxId").focus(); }); </script>
通过在$(document).ready()
调用这个函数。
这意味着这个函数将在DOM准备就绪时执行。
有关READY函数的更多信息,请参阅: http : //api.jquery.com/ready/
<html> <head> <script language="javascript" type="text/javascript"> function SetFocus(InputID) { document.getElementById(InputID).focus(); } </script> </head> <body onload="SetFocus('Box2')"> <input id="Box1" size="30" /><br/> <input id="Box2" size="30" /> </body> </html>
恕我直言,“最干净”的方式来select页面上的第一个可见,启用文本字段,是使用jQuery,并做这样的事情:
$(document).ready(function() { $('input:text[value=""]:visible:enabled:first').focus(); });
希望有帮助…
谢谢…
只需在文本框中写入自动对焦。 这很简单,它的工作原理是这样的:
<input name="abc" autofocus></input>
希望这可以帮助。
作为一般build议,我会build议不要从地址栏偷取焦点。 ( 杰夫已经提到过了。 )
网页加载需要一些时间,这意味着在用户键入pae URL后,您的焦点更改可能会发生很长一段时间。 然后,他可以改变主意,回到url打字,而你将加载你的网页,并把重点放在你的文本框。
这是我把Google作为首页的唯一原因。
当然,如果你控制networking(本地networking),或者如果重点改变是解决一个重要的可用性问题,忘记我刚刚说的:)
我有一个稍微不同的问题。 我想要autofocus
,但是,希望placeholder
文本保持,跨浏览器。 有些浏览器会在字段集中时隐藏placeholder
文本,有些会保留它。 我不得不让占位符保持跨浏览器,这有不可思议的副作用,或停止使用autofocus
。
于是我倾听了第一个键入主体标签的键,并将该键redirect到目标input字段。 然后所有的事件处理程序都被杀死,以保持干净。
var urlInput = $('#Url'); function bodyFirstKey(ev) { $('body').off('keydown', bodyFirstKey); urlInput.off('focus', urlInputFirstFocus); if (ev.target == document.body) { urlInput.focus(); if (!ev.ctrlKey && !ev.metaKey && !ev.altKey) { urlInput.val(ev.key); return false; } } }; function urlInputFirstFocus() { $('body').off('keydown', bodyFirstKey); urlInput.off('focus', urlInputFirstFocus); }; $('body').keydown(bodyFirstKey); urlInput.focus(urlInputFirstFocus);
如果你正在使用ASP.NET,那么你可以使用
yourControlName.Focus()
在服务器上的代码中,这将在页面中添加适当的JavaScript。
其他服务器端框架可能有一个等效的方法。
使用下面的代码。 对我来说,这是工作
jQuery("[id$='hfSpecialty_ids']").focus()