javascript - 调用 focus 方法会导致 onblur 无休止地触发

标签 javascript dom dhtml onblur onfocus

我想在用户移动到另一个字段时验证输入框。我有以下代码,运行良好。

validate = (v) => {
  if (v.value=="yes") return;
  alert("Value must be exactly 'yes'. Please rectify.");
  //v.focus();
}
<p>Enter only 'yes' in this field:</p>
<input onblur='validate(this);' />

但是,如果我添加调用 focus 方法,以便在继续之前向用户突出显示以修复错误,则 onblur 方法将被无休止地触发。为什么会这样?

fiddle 是https://jsfiddle.net/OldGeezer/8xfLwvn6/4/

在进一步测试中,我发现如果由于单击另一个应用程序窗口而失去焦点,则不会发生无休止的onblur。如果我只是单击网页的另一部分(在 Chrome 中),就会发生这种情况。

最佳答案

使用 alert() 会从事件元素中移除焦点,从而导致触发 blur。因此,根据您的脚本,blur 会连续触发。使用console.log()可以帮助您更好地理解这一点。

关于javascript - 调用 focus 方法会导致 onblur 无休止地触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55879014/

相关文章:

javascript - js 对象的初始化不适用于特定变量名称

javascript - 应该调用 ngOnInit 内部的函数

javascript - 用 JS/jQuery 中的文本替换 DOM 树中的非图像元素

javascript - IE8 兼容模式(或可能是 IE7)与 css 相对位置相关的回流错误

javascript - 查找更改事件的触发方式

javascript - 改变 Canvas 元素的颜色

html - 尝试检查 DispStaticNodeList 时 Excel 崩溃

javascript - 在 Chrome 下 - Mootools 注入(inject)因 null 元素而失败

javascript - DHTML,多个 CSS 类,在 IE7 中

javascript - 为什么我的 <div> 在我告诉它时不使用 javascript 调整大小?