Jon*_*n M 9 html javascript events focus
我有类似的东西:
<input type="textbox" id="partNumber" onChange="validatePart(this);">
<input type="textbox" id="quantity" onfocus="saveOldQuantity(this);">
Run Code Online (Sandbox Code Playgroud)
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??
}
}
Run Code Online (Sandbox Code Playgroud)
Cra*_*gTP 19
添加一个小超时并将焦点重置回partNumber文本框应该可以解决问题.
因此,您的validatePart()功能变为:
function validatePart(node) {
if (!node.value) {
alert('Please enter a part number.');
setTimeout(function(){node.focus();}, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个快速的"实时"示例,alert无论输入到partNumber文本框中的内容是什么,只需触发即可成功将焦点返回到partNumber文本框(即使您将其quantity选中文本框也是如此).