我有类似的东西:
<input type="textbox" id="partNumber" onChange="validatePart(this);">
<input type="textbox" id="quantity" onfocus="saveOldQuantity(this);">
进行更改并且文本框失去焦点之后,
onChange
事件已正确触发。当quantity
成为焦点时,onfocus
事件会正确触发以保存quantity
的旧值,然后再进行更改。如果
validatePart()
检测到无效的partNumber
值,则会将用户alert
告知该事实。清除alert()
后,我想将焦点返回到partNumber
输入。但是,在输入节点上执行focus()
并不会使其获得焦点。调试在这里很棘手,因为IE调试窗口的交互当然会改变焦点。如果在
partNumber
中检测到错误,如何确保焦点返回到validatePart()
?编辑:
validatePart()
的简单版本:function validatePart(node) {
if (!node.value) {
alert('Please enter a part number.');
node.focus(); // <======= why isn't this having any effect??
}
}
最佳答案
添加一个小的超时并将焦点重新设置回partNumber
文本框应该可以解决问题。
因此,您的validatePart()
函数变为:
function validatePart(node) {
if (!node.value) {
alert('Please enter a part number.');
setTimeout(function(){node.focus();}, 1);
}
}
无论输入
alert
文本框中输入了什么,Here's a quick "live" example都会简单地触发partNumber
并成功地将焦点返回到partNumber
文本框(即使您将其标签到quantity
文本框也是如此)。