如何在alert()之后给出focus()?

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选中文本框也是如此).