gpt4 book ai didi

javascript - 使用 AJAX 刷新另一个 div 后将焦点设置在文本字段上

转载 作者:行者123 更新时间:2023-11-30 18:20:45 25 4
gpt4 key购买 nike

我现在一直在为以下问题而烦恼,希望你们能指出我的(可能是显而易见的)解决方案。

我有一个简单的 Web 应用程序,它接受输入字段 (type="text")。当页面加载时,光标已准备好接受输入。一旦用户导航离开 (onBlur),AJAX 部分就会启动,我会在数据库中查找代码,并根据结果使右侧的框变为绿色或保持红色。

更改后,我希望清除输入字段并准备好接收新输入。清除字段确实有效,但是将焦点设置到它却没有。我试过 focus() 和 select(),不行……我试着折叠 setTimeout,不行。使用当前代码,它在 FF、chrome 和 IE 中不起作用。希望大家多多指教。

这是网页代码:

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function checkTicket(tno) {
var xmlhttp;
if (tno=='') {
document.getElementById('inside').innerHTML='0';
document.getElementById('validbox').style.backgroundColor='#FF0000';
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById('inside').innerHTML=xmlhttp.responseText;
if (document.getElementById('inside').innerHTML=='1') {
document.getElementById('validbox').style.backgroundColor='#00FF00';
} else {
document.getElementById('validbox').style.backgroundColor='#FF0000';
}
set_focus();
}
}
xmlhttp.open("GET","check_eticket.php?t="+tno,true);
xmlhttp.send();
}
function set_focus() {
document.form.ticketnumber.value='';
document.form.ticketnumber.focus();
}
</script>
</head>

<body onLoad="set_focus()">
<div id="wrapper" style="position: absolute; top: 50%; height: 400px; margin-top: -200px; width: 99%;">
<div id="innerwrap" style="width: 75%; margin-left: auto; margin-right: auto;">
<div style="float: left; width: 50%; margin-left: auto; height: 400px; padding-top: 115px;">
<span style="font-size: 3em; font-weight: bold; text-align: center;">TOEGANGSCODE:<br /></span>
<form name="form">
<input name="ticketnumber" id="ticketnumber" type="text" onBlur="checkTicket(this.value)" size="11" style="font-size: 3.55em; font-weight: bold;" />
</form>
</div>
<div id="validbox" style="float: right; width: 50%; background-color: #FF0000; height: 400px; margin-right: auto;">
<div id="inside" style="display: none;">0</div>
</div>
</div>
</div>
</body>
</html>

最佳答案

问题实际上很简单:页面的“视口(viewport)”失去焦点。

网页上的所有“事件”元素(表单字段、 anchor )都会收到一个“tabindex”。当您填写字段并按“Tab”时,焦点将移至下一个“事件”元素。

在您的页面上,没有“下一个”元素。然后,浏览器会将焦点设置到浏览器界面中的下一个元素:在我的例子中 (Firefox 14.01),这个下一个元素是浏览器顶部的选项卡。

此选项卡不是您网页的一部分。因此,我的浏览器会阻止页面“窃取”焦点。

答案实际上很简单:只需添加一个额外的事件元素即可。对于 html4.01,以下标签可以获得焦点:A、AREA、BUTTON、INPUT、OBJECT、SELECT 和 TEXTAREA(参见 Tab Index on div)。 html5 规范告诉我,您可以使用制表位将任何 html 元素添加到此列表中,但遗憾的是,这(还?)对我不起作用。

现在,我建议您向页面添加 anchor ,如下面的解决方案所示。

<html>
<head>
<script type="text/javascript">
function checkTicket(tno) {
var xmlhttp;
if (tno=='') {
document.getElementById('inside').innerHTML='0';
document.getElementById('validbox').style.backgroundColor='#FF0000';
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById('inside').innerHTML=xmlhttp.responseText;
if (document.getElementById('inside').innerHTML=='1') {
document.getElementById('validbox').style.backgroundColor='#00FF00';
} else {
document.getElementById('validbox').style.backgroundColor='#FF0000';
}
set_focus();
}
}
xmlhttp.open("GET","check_eticket.php?t="+tno,true);
xmlhttp.send();
}
function set_focus() {
document.form.ticketnumber.value='';
document.form.ticketnumber.focus();
}
</script>
</head>

<body onLoad="set_focus()">
<div id="wrapper" style="position: absolute; top: 50%; height: 400px; margin-top: -200px; width: 99%;">
<div id="innerwrap" style="width: 75%; margin-left: auto; margin-right: auto;">
<div style="float: left; width: 50%; margin-left: auto; height: 400px; padding-top: 115px;">
<span style="font-size: 3em; font-weight: bold; text-align: center;">TOEGANGSCODE:<br /></span>
<form name="form">
<input name="ticketnumber" id="ticketnumber" type="text" onBlur="checkTicket(this.value)" size="11" style="font-size: 3.55em; font-weight: bold;" />
</form>
</div>
<div id="validbox" style="float: right; width: 50%; background-color: #FF0000; height: 400px; margin-right: auto;">
<div id="inside" style="display: none;">0</div>
</div>
<a href="">bang!</a>
</div>
</div>
</body>
</html>

关于javascript - 使用 AJAX 刷新另一个 div 后将焦点设置在文本字段上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com