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

我在使用对焦功能时遇到了问题,即调用模糊,而模糊功能又又调用了焦点。它正在无限循环中运行。请参考以下示例-

BlurAndFocusIssue

input.onblur = function() {
  samp.innerHTML="Called blur";
  if (!input.value.includes('@')) {
    input.classList.add('invalid');
    alert('Please enter a correct email.');
    document.getElementById("input").focus();
  }
};


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


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

最佳答案

使用setTimeout()控制Onblur

JSFiddle

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 = "";
  }
};

关于javascript - 阻止焦点调用模糊功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52911644/

10-16 14:40