我有一个包含多个文本输入字段的大表单.基本上,我需要处理所有字段的onchange事件和某些字段的onblur事件.当对字段进行更改并且字段失去焦点时,两个事件都会触发(这是正确的行为).唯一的问题是我想处理onblur
在我处理onchange事件之前的事件.
在ie和Firefox中进行一些测试之后,似乎默认行为是在onblur之前触发onchange事件.我一直在使用以下代码作为测试…
这让我想到了我的问题:
>似乎这种行为在浏览器中是一致的.为什么onchange首先开火?
>由于我无法处理每个输入元素的onblur事件,有没有办法在处理onchange事件之前触发onblur?
最佳答案
> onchange首先触发的原因是,一旦元素失去焦点(即“模糊”),通常就会完成更改(我说通常是因为脚本仍然可以在没有用户交互的情况下更改元素).
>对于那些首先需要onblur处理的元素,您可以禁用onchange处理程序并从onblur处理程序触发onchange(甚至是自定义事件).这将确保正确的订单,即使它是更多的工作.要检测更改,可以为该字段使用状态变量.
原文链接:https://www.f2er.com/html/426472.html>对于那些首先需要onblur处理的元素,您可以禁用onchange处理程序并从onblur处理程序触发onchange(甚至是自定义事件).这将确保正确的订单,即使它是更多的工作.要检测更改,可以为该字段使用状态变量.
但是,作为一般性评论,对这种同步性的需求表明,即使有时无法避免,您用于解决您正在解决的任何问题的方法可能还需要更多的工作.如果您确定这是唯一的方法,请尝试以下方法之一!
编辑:只是要详细说明最后一点,你必须遵循一些关于你的事件模型的假设.你是假设每个变化事件后面都是模糊的,否则就是未经处理,或者你想要处理每个变化,但是那些随后是一个模糊进一步处理后的onblur对它们做了什么?在任何情况下,如果您想强制执行订单,处理程序将需要访问公共资源(全局变量,属性等).您可能想要使用其他事件类型吗? (输入?).最后,此链接包含Mozilla浏览器更改事件的一些详细信息:
https://developer.mozilla.org/en-US/docs/Web/Reference/Events/change.
第三个“子弹”解决了事件顺序问题.