禁止用户进行DOM操作,是前端工程师在交互开发过程中最常遇到的一种需求。比如:防止表单重复提交、勾选阅读协议才开放提交按钮等等… 本文介绍了一种作者在平时工作中管理DISABLED行为的便捷方案,利用极少量的代码,通过简单的约定,即可轻松管理交互过程中的DISABLED,ENABLE。
开始编码前,首先我们来抽像下行为模型:
- 监控用户触发DOM事件
- 事件触发前判断DOM是否标识禁用
- yes,不触发任何操作 | no, 触发dom绑定事件
细想下来用户行为非常简单,判断逻辑也非常简单,哪我们开始构思如何实现统一便捷的管理方法。
第一步:首先来看看上面第2点,判断DOM是否具有禁用标识。 这个非常容易实现,通过固定的class,dom 属性等等特征都可以做到。
第二步:回头再查看第1点,这一步,我们要在用户事件绑定的方法触发前,进行dom状态的识别。这里我们从jQuery事件绑定出发 (按照同样的思路,走深一层,也可以在原生JAVASCRIPT做出同样的扩展,这里作者就偷偷懒啦),只要在jQuery事件触发前,前置一个判断不就好了嘛。这一步也非常容易实现。SO,实现逻辑清晰了。下面来看看具体实现方案吧:
实现步骤:
- 定义一个标识,这里我们定义.disabled为禁用标识。符合大部分的开发逻辑.
- 对jQuery事件绑定进行改写,这也是最核心,最简单的地方, 由于代码非常简单我也就不多作说明了,大家往下看吧:
1 | //基于这种方式大家也可以做出更多的前置规则扩展 |
- 在需要控制用户事件的DOM上,动态的添加删除.disabled就好了。
用例:1
2
3
4Site.send({
antiBtn: $dom //触发元素的jQuery选器,用于防重复提交。
...
});
这是作者在某项目中,通信模块的防重复提交的代码实例, 只用简单在异步请求中指定要防重复提交的按钮,让其在触发前、success、error中自动控制对按钮.diabled的添加删除。在调用时指定好元素jQuery选择器,即可轻松实现对按钮的禁用状态控制。
本文仅分享作者工作中的经验心得,欢迎大家提出新的思路。