gpt4 book ai didi

javascript - 在 onchange 事件之前触发 onblur 事件

转载 作者:太空狗 更新时间:2023-10-29 14:47:26 28 4
gpt4 key购买 nike

我有一个包含多个文本输入字段的大型表单。本质上,我需要处理所有字段onchange 事件和某些 字段的onblur 事件。当对字段进行更改并且该字段失去焦点时,两个事件都会触发(这是正确的行为)。唯一的问题是我想处理 onblur 在我处理 onchange 事件之前。

在 ie 和 Firefox 中进行一些测试后,似乎默认行为是在 onblur 之前触发 onchange 事件。我一直在使用以下代码作为测试...

<html>

<body >
<input type="text" value="here is a text field" onchange="console.log('Change Event!')" onblur="console.log('Blur Event!')" >

</body>
</html>

这让我想到了我的问题:

  1. 似乎这种行为在浏览器中是一致的。为什么 onchange 先触发?

  2. 由于我无法处理每个输入元素的 onblur 事件,有没有办法让 onblur 在处理 onchange< 之前触发 事件?

最佳答案

  1. onchange 首先触发的原因是,一旦元素失去焦点(即“模糊”),更改通常会完成(我说通常是因为脚本仍然可以在没有用户的情况下更改元素互动)。

  2. 对于那些需要先处理 onblur 的元素,您可以禁用 onchange 处理程序并触发 onchange(甚至自定义事件)来自 onblur 处理程序。这将确保正确的顺序,即使它是更多的工作。要检测变化,您可以为该字段使用状态变量。

不过,作为一般性评论,对这种同步性的需求表明您用于解决正在解决的任何问题的方法可能需要更多工作,即使有时无法避免。如果您确定这是唯一的方法,请尝试其中一种方法!

编辑:为了详细说明最后一点,您必须遵循一些关于您的事件模型的假设。您是否假设每个 change 事件后跟一个 blur 并且不进行处理,或者您想处理每个 change 但那些是然后是 bluronblur 对它们做了什么之后得到进一步的处理?在任何情况下,如果您想强制执行处理程序需要访问公共(public)资源(全局变量、属性等)的顺序。您可能还想使用其他事件类型吗? (输入?)。最后,此链接包含 Mozilla 浏览器的 change 事件的一些详细信息: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/change .第三个“项目符号”解决了事件顺序问题。

关于javascript - 在 onchange 事件之前触发 onblur 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com