Joe*_*oel 6 html javascript jquery dom javascript-events
我有一个包含多个文本输入字段的大表单.从本质上讲,我需要处理onchange事件的所有字段和onblur事件的一些领域.当对字段进行更改并且字段失去焦点时,两个事件都会触发(这是正确的行为).唯一的问题是我想在处理onblur
事件之前处理onchange事件.
在ie和Firefox中进行一些测试之后,似乎默认行为是在onchange之前触发事件onblur.我一直在使用以下代码作为测试...
<html>
<body >
<input type="text" value="here is a text field" onchange="console.log('Change Event!')" onblur="console.log('Blur Event!')" >
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这让我想到了我的问题:
似乎这种行为在浏览器中是一致的.为什么onchange先开火?
由于我无法处理onblur每个输入元素的事件,有没有办法onblur在处理onchange事件之前触发?
首先onchange触发的原因是,一旦元素失去焦点(即'模糊'),变化通常就完成了(我说通常是因为脚本仍然可以在没有用户交互的情况下更改元素).
对于那些onblur首先需要处理的元素,您可以禁用onchange处理程序并onchange从onblur处理程序中激活(甚至是自定义事件).这将确保正确的订单,即使它是更多的工作.要检测更改,可以为该字段使用状态变量.
但是,作为一般性评论,对这种同步性的需求表明,即使有时无法避免,您用于解决您正在解决的任何问题的方法可能还需要更多的工作.如果您确定这是唯一的方法,请尝试以下方法之一!
编辑:只是要详细说明最后一点,你必须遵循一些关于你的事件模型的假设.您是否假设每个change事件后跟一个blur并且未经过处理,或者您是否愿意处理每个事件,change而不是那些随后进行blur进一步处理的事件onblur?在任何情况下,如果您想强制执行订单,处理程序将需要访问公共资源(全局变量,属性等).您可能想要使用其他事件类型吗?(input?).最后,此链接提供了有关changeMozilla浏览器事件的一些详细信息:https:
//developer.mozilla.org/en-US/docs/Web/Reference/Events/change.第三个"子弹"解决了事件顺序问题.
| 归档时间: |
|
| 查看次数: |
19014 次 |
| 最近记录: |