JavaScript -onblur和焦点可见的警报问题Firefox/Chrome

uz75evzq  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(217)

onblur中,我需要调用alert(),但这在Chrome和Firefox中不起作用。Sess https://jsfiddle.net/mimomade/5sur482w/1/
在Firefox中,:focus-visible在离开第二个和第四个输入字段后保留,并且不会被删除。
在Chrome中,我不能离开第二个输入字段。虽然第一个没有任何问题。

oaxa6hgo

oaxa6hgo1#

最下面是修复了两个bug的代码。你的初始JavaScript看起来像这样:

// Has different bugs in Firefox and Chrome.
function blurring(el) {
  console.log(el.id + ' pre  alert');
  alert('blurring ' + el.id);
  console.log(el.id + ' post alert');
}

Firefox中,您的明显错误实际上掩盖了一个类似于您在Chrome中遇到的错误。当警报被移除时,代码具有预期的行为,因此警报和事件以一种奇怪的方式交互。在这种特定的情况下,为了解决这个问题,我们可以通过将函数 Package 在零毫秒的超时中来等待事件完成。

// Has a similar bug in both browsers.
function blurring(el) {
  console.log(el.id + ' pre  alert');
  setTimeout(function () {
    alert('blurring ' + el.id);
    console.log(el.id + ' post alert');
  }, 0);
}

Chrome中,您的bug似乎是由每次关闭警报框时发出的模糊事件引起的。幸运的是,因为我们等待事件完成,所以活动元素应该是新选择的元素,而不是浏览器设置的元素。这意味着检查确保eldocument.activeElement不同就足以修复此错误。

// addresses both bugs.
function blurring(el) {
  console.log(el.id + ' pre  alert');
  setTimeout(function () {
    if (document.activeElement !== el) {
      alert('blurring ' + el.id);
      console.log(el.id + ' post alert');
    }
  }, 0);
}

相关问题