用JavaScript 记录用户在表单中所作的修改

js_06 表单案例 文章目录1.表单增加功能2.表单删除功能3.表单修改功能4.表单确定功能 1.表单增加功能 获取要操作的表格。 开始增加行:增加的行的位置在表格的倒数第二行,下标:总行数-1。空行 获取表格行目前的最大下标 给新增加的行对象 newRow添加 id属性 往空行里面增加4个列 // 增加行 var myTable = document.getElementById("order"); function addRow(){ var row 阅读详情

 TrackChanges.js:用JavaScript 记录用户在表单中所作的修改


原理:
1.为form 中的每个field (submit/reset/button/image除外)生成一个虚假的INPUT element,用于保存页面装载时form 中每个element的初始值。

2.在form 提交之前,比较form 中的每个field 与上面一步生成的虚假的INPUT element,记录二者的差别(diff)。然后合并所有的差别并赋值到另一个新的INPUT element中。

这样,用户在前台操作过程中所修改的内容就可以随form 一起提交到服务器端进行处理了。

1. trackChange.js

 

 

/**********************************************************
TrackChanges v0.1 By lhelper <lhelper at gmail dot com>

 


track changes of client end form fields
1. append dummy input fields onto the raw form, which has
the origianl value, checked status, etc. as the real one

2. compare the dummy input fields with the originals, record
the changes (unix/linux diff format) with one more real
field, whose name is '_tc_c' (default)
**********************************************************/
var TrackChanges={
initialize : function _init(frm) {
if(!frm) { // smart check
return;
}
var eles=frm.elements;
for(var i=0, n=eles.length; i<n; i++) {
var ele=eles[i];
// alert(ele.tagName + ":" + ele.type + ":" + ele.name + ":" + ele.value);
// 1. omit the submit button (submit, reset, button, image, etc.)
if(ele.tagName=="INPUT") {
if(ele.type=="submit" ele.type=="reset" ele.type=="button" ele.type=="image") {
continue;
}
if(ele.type!="checkbox" && ele.type!="radio" && document.getElementsByName(ele.name).length > 1) {
alert("There are " + document.getElementsByName(ele.name).length + " field elements with the same name (" + ele.name + "), which can result in unbelievable output!");
return false;
}
}

 


// 2. append dummy field _tc_f[ele.name][ele.id][0] onto the form
var obj=document.createElement("INPUT");
obj.type="hidden";
//obj.type="text";
if(ele.tagName=="INPUT" && (ele.type=="checkbox" ele.type=="radio")) {
if(!ele.id) {
ele.id=ele.name + "_" + ele.value;
}
obj.name="_tc_f[" + ((ele.type=="checkbox") ? "checkbox" : "radio") + "][" + ele.name + "][" + ele.id + "][0]";
obj.checked=ele.checked;
} else {
if(!ele.id) {
ele.id=ele.name;
}
obj.name="_tc_f[input][" + ele.name + "][" + ele.id + "][0]";
}
obj.value=ele.value;
obj.disabled=true;
frm.appendChild(obj);
}
},

 


recordChanges : function _diff(frm, fn) {
if(!frm) { // smart check
return;
}
var cmsDiff="";
for(var eles=frm.elements, i=0; i<eles.length; i++) {
var re=new RegExp("_tc_f//[(.*?)//]//[(.*?)//]//[(.*?)//]//[0//]");
var m=re.exec(eles[i].name);
if(m == null) {
continue;
}
if(m[1] == "checkbox" m[1] == "radio") {
if(document.getElementById(m[3]).checked != eles[i].checked) {
cmsDiff+="< " + m[3] + ":" + eles[i].checked + "/n----------/n" + "> " + m[3] + ":" + !eles[i].checked + "/n/n";;
}
} else {
if(document.getElementById(m[3]).value != eles[i].value) {
cmsDiff+="< " + m[3] + ":" + eles[i].value + "/n----------/n" + "> " + m[3] + ":" + document.getElementById(m[3]).value + "/n/n";;
}
}
}
//alert(cmsDiff);
var obj=document.createElement("INPUT");
obj.type="hidden";
//obj.type="text";
obj.name=(fn) ? fn : "_tc_c";
obj.value=cmsDiff;
frm.appendChild(obj);
}
};

 

 

2. 使用方法:

 

 


<script language=JavaScript>
<!--
function _submit(frm) {
// 记录用户修改的内容
TrackChanges.recordChanges(frm);

 


frm.method="post";
frm.action="news_edit_save.jsp";
return true;
}
// -->
</script>
......

 


<form method="POST" action="/dev/null" name="news_info" onSubmit="return _submit(this)">
<input type="text" name="news_title" maxlength="50" value="">
......
<input type="submit" value="确认录入" name="btnSave" class="submit">
</form>

 

<script language="javascript">
<!-- //
// 初始化 TackChanges
TrackChanges.initialize(document.news_info);
// -->
</script>

 

自定义JavaScript插件用于埋点日志记录用户表单输入数据时间用于用户安全数据分析 1.自定义两个js插件 ,一个用于统计用户表单中每项的输入时长,一个用于生成cookie,提交表单时会将记录数据存入cookie中 一并发往服务器端 2.jquery.cookie.js【可以将记录参数存入cookie中】 (function (factory) { if (typeof define === 'function' && define.amd) { //... 阅读详情

相关推荐

track-changes:用于跟踪对象属性更改以用于调试的非常简单的 API

跟踪变化 用于跟踪对象属性更改以用于调试的非常简单的 API。 使用安装 npm i track-changes --save 用法 var app = new Changes ( ) ; app . track ( key , 'brief comment about value' , value ) ; 例子 (另见 ) 这是一个基本示例,展示了如何跟踪应用程序中值的更改。 var app = new Changes ( ) ; var a = 'a' ; app . track ( 'a' , 'change #1' , a ) ; a = 'b' ; app . track ( 'a' , 'change #2' , a ) ; a = 'c' ; app . track ( 'a' , 'change #3' , a ) ; a = 'd' ; app . track

用js实现双击修改表单信息

目录案例目的实现思路实现过程 案例目的 参考商品表,单击操作不可修改商品信息;当双击一个数据后,即可修改数据信息,当离开该数据范围后就修改成功(数据库中的数据信息也跟着修改成功)。 实现思路 1.在table中显示商品信息,每一条商品信息都为readonly状态 2.再通过js(即在script标签中)为每个数据标签绑定一个双击事件,双击该元素时就将该元素readonly状态变为false(即可编...

zjt_1010的博客 1781

track-changes:用于保存和压缩单个文档更新到可浏览历史记录的 API

背页/跟踪更改 用于将原始编辑器更新转换为压缩和可浏览历史记录的 API。 验收测试可以使用命令运行 AWS_BUCKET=<bucket> AWS_ACCESS_KEY_ID=<aws> AWS_SECRET_ACCESS_KEY=<aws> make test 其中bucket-name 、 aws-access-key和aws-secret-access-key是 AWS S3 存储桶的凭证。 执照 此存储库中的代码在 GNU AFFERO GENERAL PUBLIC LICENSE 版本 3 下发布。可以在LICENSE文件中找到副本。 版权所有 (c) Overleaf,2014-2019。

初学(JavaScript)写成的初步拥有增删改的用户信息表(菜鸡)。

美工就不要纠结了哈,不要纠结~ 菜鸡为了更好的学习JavaScript而写~ 目前主要基本功能:可以进行用户信息的增减,修改,还未限制输入的格式要求 图片如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name

先养只猫的博客 440

track-word-changes

Word 文档跟踪器 此存储库包含一个命令行工具,可打开 Word 文档的跟踪更改。 要求 为了提供与 Word 93-2003 的兼容性,您需要unoconv实用程序。 如果您使用的是 Ubuntu,则必须安装以下命令行实用程序: Mac 和 Windows 如果您使用的是 MAC 或 Windows,则需要安装 。 安装后,克隆。 此时,您必须创建以下环境变量来存储 unoconv python 脚本的位置: $ export UNOCONV_PATH=/path-of-unoconv-python-script 之后,您必须在用户二进制文件中安装以下脚本之一: Unoconv 笔记 请注意,您需要让 unoconv 在后台运行才能以其他用户身份使用它。 要打开端口,您必须以 sudo 身份登录: $ sudo unoconv --listener 基本用法 $ npm

01 AUTOSAR CP标准文档阅读指南

01 AUTOSAR CP标准文档阅读指南

汽车软件工程师 | 好奇博主 | 处女座 1134

js 原生js写一个可编辑表格实例,一看就会,非常容易理解,方法详细,分布讲解!!! 详细用到的dom操作,childNode,createElement,.appendChild操作,

JS可编辑表格 1.实现的功能 表格可编辑的部分单击就可以生成一个输入框,并且自动获取输入框焦点 在输入框输入修改的内容之后,当输入框失去焦点的时候就会判断输入的内容是否满足条件。 如果满足条件就修改内容,如果不满足条件就弹出提示 修改的内容再修改原始的数据 具体可以看如下图片 点击生成输入框 输入内容 完成修改 如果不满足条件就会返回原始值 其他的各项数据操作基本相同 2.实现的思路 首先在页面上生成表格的表头thead部分,然后tbody部分留空 然后在JS里面写入数据,用写的数据动态生成tbo

qq_52168812的博客 3205

高光谱目标检测论文学习(1)—— Hyperspectral Target Detection:Hypothesis Testing,SNR and SA Theories

前言 从这篇开始,将会学习一些高光谱目标检测的论文,我仍然把这篇文章放到了读论文专栏里,但是不对其进行顺序编号了,因为这个方向是比较小众的。今天来学习这篇TGRS2021的最新论文,讲的比较详细,相对比较适合初学者入门。我之前也写过一些有关目标检测的论文,但是高光谱目标检测(HTD)和之前的我们学的目标检测是不同的,因为其检测的对象不是普通摄像头得来的数字图像,而是高光谱遥感图像。其包含了很多光谱信息,而光谱信息本身经过处理后就可以作为特征,因此很多情况下就无需使用广义的目标检测问题中的卷积神经网络等方式去

MrBamboo2000的博客 7483

JS实现input填写的数据进行表格的录入、修改和保存

JS实现input填写的数据进行表格的录入、修改和保存

m0_59648875的博客 3159

特征图与token的区别以及两者之间的转换

特征图和token之间的联系以及两者之间的转换

mariodf的博客 1012

MATLAB实现灰雁优化算法(GGO):从原理到实战的详细级教程

灰雁优化算法(GGO)是一种新型群体智能算法,模拟灰雁迁徙和觅食行为。算法通过领导更替机制、V形编队飞行和群体觅食策略,平衡全局探索与局部开发能力,具有收敛精度高、避免局部最优等特点。在MATLAB环境中,算法实现包括初始化种群、迭代更新领导雁、执行编队飞行和觅食行为等核心模块。用户可根据问题维度设置参数,通过收敛曲线和可视化分析评估性能。关键参数如领导更替频率、V形编队强度和觅食强度需根据问题复杂度调整,以获得最佳优化效果。该算法适用于各类优化问题,具有较好的鲁棒性和稳定性。

fx666_的博客 1212

JS(JavaScript)数据校验 表单校验-案例

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 今人不见古时月,今月曾经照古人。 古人今人若流水,共看明月皆如此。 ——《把酒问月·故人贾淳令予问之》 文章目录JS(JavaScript)数据校验 表单校验-案例1. 目的2. 实现3. 案例演示3.1 预览效果3.2 示例代码3.3 示例代码演示3.4 示例代码下载 JS(JavaScript)数据校验 表单校验-案例

感谢阅读 1759

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 503

element 修改表单值后表单验证无效_javascript自学记录:表单脚本1

第14章 表单脚本14.1 表单的基础知识​获得表单元素:// 取得id为form_1的元素varform=document.getElementById("form_1");// 得到第一个表单元素varfirstForm=document.forms[0];// 得到名称为test的formvarmyForm=document.forms["test"];14.1.1 提交表...

weixin_39625162的博客 196

ROS2实战:打造智能巡检机器人的关键技术与实现

本文详细介绍了基于ROS2和Navigation2构建智能巡检机器人的完整实战流程。通过设计主从协作的事件驱动架构,实现了机器人在已知地图中的自动导航、定点语音播报和环境图像采集功能。文章涵盖了从环境搭建、仿真配置到核心控制节点、语音服务与图像记录模块的代码实现,为开发者打造实用的自动巡检机器人提供了清晰的技术指南。

weixin_29031057的博客 222

Pico-实时预览工具PreviewTool

Unity XR SDK与Preview Tool下载链接:SDK - Pico Developer Platform1、下载Preview Tool后,将PreviewTool的APK先安装在VR头显里2、在PC端打开Preview Tool.exe文件Window -> Package Manager -> Add package from disk,选择下载的pico sdk中的package.json(如下图),Open导入。Edit -> Project Settings,设置设备和安卓版本,如下

晴天下的大头娃娃 4251

在 Odoo 18 表单视图中使用 JS 类的方法

Odoo 18 采用了现代化的 JavaScript 框架——Odoo Web Library (OWL),基于组件化架构设计运行。这一框架显著增强了 Odoo 的功能,支持创建自定义小部件、表单视图管理、自定义操作、前端功能、API 调用、事件处理等。在 JavaScript 小部件、模板和视图的上下文中,我们主要使用js_class作为关键属性,来定义和扩展系统在用户界面方面的行为。js_class使开发人员能够将 JavaScript 类链接到 XML 元素,从而在 Odoo 中动态启用自定义交互。

智能化技术分享 1376

AI 智能体(Agent)应用开发工程师 · 进阶面试 (五)

在有多位 Agent 共同参与决策时(如评审委员会、代码审查小组),它们可能提出截然相反的建议。共识机制就是用来在这种冲突中得出唯一行动方案的规则。常用机制:多数投票:每个 Agent 一票,根据投票结果决定。实现简单,但忽略了专业度差异。加权投票:根据 Agent 的角色重要性或历史表现赋予不同权重,例如首席架构师 Agent 的票权重是普通开发者 Agent 的 2 倍。管理者仲裁:由一个权限更高的 Manager Agent 听取各方理由后做出最终裁决。这类似于层级制组织决策。辩论收敛。

篮球界最会写bug的人;程序猿中打球最菜的人。 393

js防止表单重复提交

在表单提交的时候,用户有时候会重复的点击提交按钮,会导致多次提交表单,产生重复数据。 提交表单一般有三种方式 1.submit按钮 会调用onsubmit方法事件 2.当form中只有一个文本本框按回车的时候提交 会调用onsubmit事件 3.调用表单的submit方法提交 前两种是可以触发 onsubmit事件的,但是第三种不会。 解决方法: 1、 onsubmi

xiaoflsuper的博客 3679

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JS表单验证(HTML+CSS+JS)详细教程

简单的JS表单验证,验证input输入框是否符合要求,css精美样式,值得新手记录学习

qq_51336762的博客 8262

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

用户注册表单的设计及验证

JSP程序设计 用户注册表单的设计及验证

weixin_48864837的博客 4245

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Vue 表单只提交修改过的部分

文章目录1、页面效果2、实现1.修改回显2.声明,method3.提交方法时调用 1、页面效果 2、实现 1.修改回显 注意: 在this.reset() 方法中每次清空 diffData this.diffData = {}; 2.声明,method data() { return { …… 之前的数据不变 form: null, //记录设备原始数据 diffData: null, //记录修改过的值 } }, /

莫不静好 4024

workflow表单js中数据插入修改删除功能

workflow表单js中数据插入修改删除功能 var row = GetObject('treegrid1').GetSelected(); if(row==null) { ShowAlert('请先选择一个角色'); return; } var roleid = GetObject('treegrid1').GetSelected().id; var rolemc = Ge...

hsg77的专栏 648

HTML 表单的练习记录篇

前言: 近期的工作中是负责公司网站的维护,所以就得学习Web前端的知识…时常忘记,所以记录下,也算是学习Web的一个开篇吧!废话不多说,coding … Ⅰ.简述表单相关的标签:form、fieldset、legend、table、tr、td、input、select、option、textarea 等;表单相关标签对应的部分属性: 标签 元素

追求,成长 4312

js 创建书签小工具并实现自动表单填写

1.最近学校布置网课视频,贼心不改,就找了一个自动刷题软件就处理好了,本来是一件完美的事情,可是作为学计算机的同学,我是不允许有什么神奇的事情发上,必须研究研究怎么实现的2.虽然只是有了一小点了解,就先记录一下吧,主要就是创建内容为js代码的浏览器书签来实现的,直接看效果 //这就是一个简单的表单 <!DOCTYPE html> <html> <head> <meta charset="ut

会飞的徐公明 1万+
上一篇: 炼狱:window.createPopup()弹出提示tips
下一篇: 获取页面的META关键字
SmartJavaer
博客等级 码龄21年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值