如何在网页加载时自动将焦点设置到文本框?
是否有HTML标签可以实现此功能,还是必须通过JavaScript来完成?
如何在网页加载时自动将焦点设置到文本框?
是否有HTML标签可以实现此功能,还是必须通过JavaScript来完成?
如果你正在使用jQuery:
$(function() {
$("#Box1").focus();
});
或原型:
Event.observe(window, 'load', function() {
$("Box1").focus();
});
或普通的 JavaScript:
window.onload = function() {
document.getElementById("Box1").focus();
};
请注意,这将替换其他的onload处理程序,因此请在谷歌上查找addLoadEvent()以获取安全的方法来附加onload处理程序,而不是替换它们。
在HTML中,所有表单字段都可以使用 autofocus
属性。在 Dive Into HTML 5 中有一个很好的教程。不幸的是,IE版本低于10的浏览器目前不支持该属性,请参考此处。
要使用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元素下方。
编辑:另一个优点是它可以在某些浏览器中关闭JavaScript并且当您不想支持旧浏览器时,可以删除JavaScript。
编辑2:Firefox 4现在支持autofocus
属性,只有IE不支持。
attribute="value"
的形式来表示布尔属性十分普遍。随着 HTML5 的出现,我们采用了“空属性语法”,这样就不再需要冗余的代码了。现在,我们可以这样写:<input checked disabled autofocus data-something>
。 - dave1010你需要使用JavaScript:
<BODY onLoad="document.getElementById('myButton').focus();">
@Ben指出你不应该这样添加事件处理程序。虽然这是另一个问题,但他建议你使用这个函数:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
然后在您的页面上调用addLoadEvent,并引用一个将焦点设置到所需文本框的函数。
只需在文本框中写入autofocus即可。这很简单,它的作用如下:
<input name="abc" autofocus></input>
希望这能够有所帮助。
你可以通过以下方式轻松使用 jQuery 来实现:
<script type="text/javascript">
$(document).ready(function () {
$("#myTextBoxId").focus();
});
</script>
调用$(document).ready()
函数,意味着该函数会在DOM准备就绪时执行。
要了解有关READY函数的更多信息,请参阅:http://api.jquery.com/ready/
使用纯粹的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 处理程序中(通常是 page_load,如果您正在使用 visual studio 提供的标准页面模板),您可以使用:
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,并执行以下操作:
$(document).ready(function() {
$('input:text[value=""]:visible:enabled:first').focus();
});
<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>
autofocus
,但是希望在不同浏览器下保持 placeholder
文本的显示。一些浏览器会在输入框获得焦点时隐藏 placeholder
文本,而另一些则会保留它。我必须要么让占位符跨浏览器保持显示,这样会导致奇怪的副作用,要么停止使用 autofocus
。
因此,我监听了对 body 标签的首次按键,然后将该按键重定向到目标输入框。然后将涉及的所有事件处理程序关闭以保持代码的整洁。
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);