美文网首页
JavaScript脏检查简单应用-检测表单是否被修改

JavaScript脏检查简单应用-检测表单是否被修改

作者: 罗坤_23333 | 来源:发表于2018-09-26 11:32 被阅读0次
在线演示

目录

  • 前言
  • 实现思路
    • 初始化
    • 监听变化
  • 在线预览
  • 参考

前言

本文章思想来自https://github.com/rubentd/dirrty
为了更好理解脏值检查(dirty checking),本文将用一个非常简单但实用的例子来阐述脏检查的实际应用,也为理解AngularJS的脏值检测或双向绑定做铺垫。

从需求出发去理解

有一个form表单,初始化时或者未发生任何改变时,不允许提交即禁用按钮。当有元素的初始值(或默认值)发生改变时,允许提交。这是一个脏值检查经典案例,如果有字段被修改时就可以理解为该表单变“脏”了。

实现思路

初始化

表单是否变“脏”,最好的方法是通过对比元素的前后值是否发生改变进行判断,所以在表单初始化时,遍历每一个表单元素(node)并添加一个属性以存储他们的初始值node.value,这个属性我们可以自定义为data-dirrty-initial-value
值得注意的是,表单元素中inputcheckboxradio没有初始值node.value而应该判断是否被选中node.checked

if(node.getAttribute('type') === 'checkbox'||node.getAttribute('type') === 'radio'){
        node.setAttribute('data-dirrty-initial-value',node.checked)
}else {
        node.setAttribute('data-dirrty-initial-value',node.value)
}

监听变化

因为表单中每一个元素的值都是独立的,所以检测form表单是否变“脏”,需要从单一元素出发判断是否变“脏”,再全部反馈给form:当存在一个元素变“脏”,则表单视为变“脏”。所以监听元素变“脏”时,添加一个属性data-is-dirrty=true以存储这个反馈。
表单事件监听用addEventListener('input',event),并使用事件代理。

form.addEventListener('input',function(e){
    let _value;
    if(e.target.getAttribute('type') === 'checkbox'||e.target.getAttribute('type') === 'radio'){
        _value = e.target.checked+''
    }else {
        _value = e.target.value+''
    }
    e.target.setAttribute('data-is-dirrty',_value!==e.target.getAttribute('data-dirrty-initial-value'))
})

在线预览

https://1uokun.github.io/h5/dist/components/dirty-checking.html
案例非常简单,但对AngularJS双向绑定的理解基础非常重要,下一篇将基于这个思想解析AngularJS双向绑定

参考

相关文章

  • JavaScript脏检查简单应用-检测表单是否被修改

    目录 前言 实现思路初始化监听变化 在线预览 参考 前言 本文章思想来自https://github.com/ru...

  • JavaScript 简介

    JavaScript 简介 在数百万张网页中,JavaScript 被用来改进设计、验证表单、检测浏览器、创建 C...

  • JavaScript基础知识

    JavaScript 是属于网络脚本语言。 JavaScript 被数百万计的网页用来改进设计、验证表单、检测浏览...

  • MVVM双向数据绑定的个人理解

    AngularJS 的脏检查机制 AngularJS的双向数据绑定采用的脏检查机制,所谓“脏检查”,就是检测到数据...

  • spring Assert工具使用

    方法入参检测工具类 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回。...

  • 服务器被墙经历

    一, 检查端口 扫描国内端口是否开启 国内端口测试 扫描国外端口是否开启国外端口检测 方法1,修改ssh 端口 /...

  • 关于Angular脏检查机制

    什么是脏检查对脏数据的检查就是脏检查,比较UI和后台数据是否一致。 什么时候触发脏检查只有当UI事件、ajax请求...

  • runoob js第八天

    JavaScript 表单验证 JavaScript 表单验证avaScript 可用来在数据被送往服务器前对 H...

  • JavaScript 表单验证

    JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输...

  • Xcode application loader上传应用

    Xcode application loader上传应用一直卡在正在复查您的应用,检查是否开发者账号已经修改,要改...

网友评论

      本文标题:JavaScript脏检查简单应用-检测表单是否被修改

      本文链接:https://www.haomeiwen.com/subject/tikynftx.html