问题描述

什么时候调用对方?是否有一种情况是 onChange 会被调用,但 onBlur 不会被调用?

最佳解决方案

onBlur 事件在您已经从对象移开而不一定更改其值的情况下被触发。

onChange 事件只有在您更改了该字段的值并失去焦点时才会调用。

你可能想看看 quirksmode’s intro to events 。当您与浏览器进行交互时,可以获取有关浏览器中发生的情况的详细信息。他的书也很好。

次佳解决方案

当一个字段失去焦点时,onblur 会触发,而当该字段的值改变时,onchange 触发。但是,这些事件并不总是以相同的顺序发生。

在 Firefox 中,选择一个已更改的字段将会在 onchange 上发生变化,并且通常会在 IE 中执行相同操作。但是,如果按确定键而不是选项卡,那么在 Firefox 中将会启动 onblur 然后 onchange,而 IE 将通常以原始顺序启动。但是,我看到 IE 也会首先发现模糊的情况,所以要小心。你不能假设 onblur 或 onchange 将发生在另一个之前。

第三种解决方案

举一个具体的例子。如果你有这样的选择:

<select onchange="" onblur="">
  <option>....
</select>

当您离开时,onblur()被调用。当您从选择中选择不同的选项时,将调用 onchange(),即更改当前选择的选项。

第四种方案

在 Firefox 中,只有在选项卡或其他单击输入字段之外,onchange 才会触发。 Onblur 也是如此。不同的是,onblur 将会触发,无论你是否改变了现场的任何内容。可能的是,ENTER 会触发其中的一个或两个,但是您不知道如果禁用表单中的 ENTER 以防止意外提交。

第五种方案

当您的焦点不再在该领域时,onBlur 就是这样。

The onblur property returns the onBlur event handler code, if any, that exists on the current element.

onChange 是当字段的值更改时。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛