Firefox中的JavaScript事件onblur在onfocus之前触发

Firefox中的JavaScript事件onblur在onfocus之前触发,javascript,firefox,Javascript,Firefox,在Firefox中使用文本框的onblur和onfocus事件时,我遇到了一个问题 在歌剧中。它按预期工作(例如先调用onfocus,然后调用onblur) 在Firefox中,首先调用onblur,然后调用onfocus。这不应该发生 如何解决这个问题?很高兴知道有些浏览器是以这种方式损坏的。考虑下面的代码。 <input type="text" id="t1" onfocus="is_editing=true" onblur="is_editing=false" /> <i

在Firefox中使用文本框的
onblur
onfocus
事件时,我遇到了一个问题

在歌剧中。它按预期工作(例如先调用
onfocus
,然后调用
onblur

在Firefox中,首先调用
onblur
,然后调用
onfocus
。这不应该发生


如何解决这个问题?

很高兴知道有些浏览器是以这种方式损坏的。考虑下面的代码。

<input type="text" id="t1" onfocus="is_editing=true" onblur="is_editing=false" />
<input type="text" id="t2" onfocus="is_editing=true" onblur="is_editing=false" />
显然,用你想在模糊/聚焦上发生的任何事情来替换is_编辑作业


使用jQuery,您显然也可以使用
$(“*:focus”)
,就像我使用上面的
document.activeElement
一样。

建议您编辑您的问题,将代码包含在这里,或者创建一个供人们快速测试代码的问题。在我看来,
onblur
放在
onfocus
之前是有意义的,否则,焦点会同时出现在两个地方。我相信IE和FF都是这样做的。为什么你认为Opera的方式是“正确的”方式?我同意nnnnnn,Opera的行为是错误的。您应该更好地解释为什么事件的顺序对您很重要-您可能会得到关于如何修复代码的建议。
function enableEdit() { is_editing = true; }

/* Can't just unset is_editing here, since broken browsers may
call onblur /after/ onfocus when tabbing between two text elements.
So, we only unset if we don't have a text element focused */
function disableEdit() {
  if (!document.activeElement) {
    /* For old & broken browser support, could traverse every DOM elem to set
    elem.onfocus = function(){ document.activeElement = elem; }
    For the meantime, I just assume they aren't broken. */
    is_editing = false;
  }
  // If not focused on a text input type, then it's OK to unset.
  else if ("text" != document.activeElement.type) {
    is_editing = false;
  }
}