Javascript 阻止焦点调用模糊功能

Javascript 阻止焦点调用模糊功能,javascript,html,Javascript,Html,我正在验证电子邮件地址,并在验证失败时创建警报消息。当用户单击警报消息上的“确定”时,焦点应返回到电子邮件地址文本框 我面临着焦点功能调用模糊的问题,模糊功能反过来又调用焦点。它在无限循环中运行。请参考下面的例子- 一旦焦点位于电子邮件地址内,我需要允许用户输入电子邮件地址并在onBlur功能上验证它。使用setTimeout()控制onBlur input.onblur = function() { samp.innerHTML="Called blur"; var validat

我正在验证电子邮件地址,并在验证失败时创建警报消息。当用户单击警报消息上的“确定”时,焦点应返回到电子邮件地址文本框

我面临着焦点功能调用模糊的问题,模糊功能反过来又调用焦点。它在无限循环中运行。请参考下面的例子-

一旦焦点位于电子邮件地址内,我需要允许用户输入电子邮件地址并在onBlur功能上验证它。

使用
setTimeout()
控制
onBlur

input.onblur = function() {
  samp.innerHTML="Called blur";
  var validating = false; //<-- IMPORTANT
  if (!input.value.includes('@')) { 
    input.classList.add('invalid');
     if(validating == false) {
              validating = true
              alert('Please enter a correct email.');
              setTimeout(function(){
              input.focus();
              validating = false;
            }, 1);
     }
  }
};


input.onfocus = function() {
  samp.innerHTML="Called focus";
  if (this.classList.contains('invalid')) {
    this.classList.remove('invalid');
    error.innerHTML = "";
  }
};
input.onblur=function(){
samp.innerHTML=“调用模糊”;

var validating=false;//
input.onblur=function(e){e.preventDefault()}
我看到这个解决方案正在工作,但是,当我聚焦到另一个窗口并返回到Chrome浏览器时,它进入无限循环,因为焦点调用blur和blur作为代码来聚焦。
input.onblur = function() {
  samp.innerHTML="Called blur";
  var validating = false; //<-- IMPORTANT
  if (!input.value.includes('@')) { 
    input.classList.add('invalid');
     if(validating == false) {
              validating = true
              alert('Please enter a correct email.');
              setTimeout(function(){
              input.focus();
              validating = false;
            }, 1);
     }
  }
};


input.onfocus = function() {
  samp.innerHTML="Called focus";
  if (this.classList.contains('invalid')) {
    this.classList.remove('invalid');
    error.innerHTML = "";
  }
};