DWZ主从表界面唯一性验证(自写js)(二)
上篇介绍了自写js判断的前三项,本篇博客介绍第四步,关于触发课程代码文本框的离开事件后,判断一整列的课程代码之间是否有重复的值。
此问题可以提取为判断一个数组里是否有重复值,重复值是什么。
第四步→判断界面唯一性,获取各行code值。
通过观察,主从表下每一行的课程代码文本框都有一个数组样式的name属性,如:name="courseList[#index#].code"
查看代码可知,每一行的课程代码都有不同的name,那么怎么获取这些不同name的对象数组呢?

通过反复试验,我最后得出一种方法,步骤是:先获得主从表内所有标签为<input>的对象,然后通过获取他们的name属性的值,来匹配。
具体匹配方法就是观察各个name之间的不同。
课程代码对应的name类型为:name="courseList[#index#].code"
课程名称对应的name类型为:name="courseList[#index#].name"
所以,通过观察,只要匹配code字符串就可以获取到一列的课程代码的对象数组了。
拿到这个数组,就开始遍历,是否数组内有重复值,如果有重复值,就把它放在第三方的数组里,最后弹出框里显示这些重复值。
具体的js代码如下:
//4、判断界面唯一性,获取各行code值
//4.1获得code列
//4.11获得表格
var table = document.all("parentTable");
//4.12获得表格下的所有文本框
var input=table.getElementsByTagName("input");
//4.13定义一个空数组来装得到的code列
var resultCodeString=[];
//4.14循环遍历出code列,并将code文本框的值放到定义的空数组resultCodeString中
for(i=0;i<input.length;i++){
//利用lastIndexOf来匹配,如果有code字符串则返回大于-1的值,
if(input[i].name.lastIndexOf("code")>-1){
//alert(input[i].value);
//如果name中匹配到了code,则将这个文本框的值放到我们的code数组里。
resultCodeString[resultCodeString.length] =input[i].value;
}
}
//测试数组容器的长度
//alert(resultCodeString.length);
//定义一个第三方数组,来装重复值
var showMessage=[];
//遍历得到的code数组容器
for(i=0;i<resultCodeString.length;i++){
//测试是否是code列中的值
//alert(resultCodeString[i]);
//以下为判断是否重复的方法,并将重复值放在数组里。
//先排序
var resultCode=resultCodeString.sort();
for(var i=0;i<resultCodeString.length;i++){
if(resultCodeString[i] != ""){
if (resultCode[i]==resultCode[i+1]){
showMessage[showMessage.length] =resultCode[i];
}
}
}
// alert(showMessage.length);
// alert("数组重复内容为:"+showMessage[i]);
//因为我们得到的重复数据会有重复的,所以需要数组去重,这里调用了unique方法,具体实现见下面的代码
var arr=showMessage.unique();
if(arr!=""){
// alert("课程代码有重复,重复值为"+arr);
alertMsg.warn( "课程代码有重复,重复值为"+arr);
}
}
JS实现得数组去重的三种方法:借鉴于《三种常用的js数组去重方法》
/* 第一种去重的方法 */
/* Array.prototype.unique = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(this[i]);
}
}
return res;
} */
/* 第二种去重的方法 */
/* Array.prototype.unique = function(){
this.sort(); //先排序
var res = [this[0]];
for(var i = 1; i < this.length; i++){
if(this[i] !== res[res.length - 1]){
res.push(this[i]);
}
}
return res;
} */
/* 第三种去重的方法 */
Array.prototype.unique = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
最后效果显示:

虽然已经触发了课程代码文本框来进行了验证,但是如果用户不看提示框,仍旧一意孤行,也不是办法,所以后台仍要对应的判断。具体后台怎么进行判断,请看下篇博客分析。
DWZ主从表界面唯一性验证(自写js)(二)的更多相关文章
- DWZ主从表界面唯一性验证(自写js)(一)
最近在项目中遇到一个问题,它的需求是: 利用DWZ的主从表结构批量添加课程信息,需要在触发课程代码文本框的离开事件时验证: 1.是否选择学院. 2.数据库里是否已存在该课程代码. 3.多条数据添加时, ...
- DWZ主从表界面唯一性验证(后台验证)(三)
之前的博客介绍了前台自写js来验证主动表的唯一性,除了前台的验证,我也学习了后台的一些判断. 再次介绍一下背景需求: 利用DWZ的主从表结构批量添加课程信息,在提交表单后,触发Action事件 1.是 ...
- 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...
- Winform界面中主从表编辑界面的快速处理
在Winform开发中,我们往往除了常规的单表信息录入外,有时候设计到多个主从表的数据显示.编辑等界面,单表的信息一般就是控件和对象实体一一对应,然后调用API保存即可,主从表就需要另外特殊处理,本随 ...
- Laravel 更新数据时在表单请求验证中排除自己,检查指定字段唯一性
原文地址:https://moell.cn/article/24 不错的laravel网站 需求场景 修改用户信息时,在表单请求验证中排除当前邮箱所在的记录行,并检查邮箱的唯一性. Laravel版本 ...
- Winform开发框架之单据窗体生成(主从表,流水单号)
源码地址:https://github.com/GarsonZhang/GZFramework.ShareDemo 前言 1.在开始本节前请先重置代码为 chapter-03-start 懒人地址:h ...
- Asp.Net MVC +EntityFramework主从表新增编辑操作的实现(删除操作怎么实现?)
Asp.Net MVC +EntityFramework主从表新增编辑操作的实现 对于MVC中同时对主从表的表单操作在网上现有的解决很少,而这样的操作在做业务系统中是经常为遇到的.我在网上搜索了很久都 ...
- DataSnap ClientdataSet 三层中主从表的操作
非原创 摘自:http://hi.baidu.com/yagzh2000/blog/item/fc69df2cb9845de78b139946.html三层中主从表的操作(删除.新增.修改)一定要在 ...
- HTML5表单及其验证
随笔- 15 文章- 1 评论- 115 HTML5表单及其验证 HTML表单一直都是Web的核心技术之一,有了它我们才能在Web上进行各种各样的应用.HTML5 Forms新增了许多新控件及其A ...
随机推荐
- 百度BAE使用ueditor 上传图片
研究BAE 也有一段时间了,但一直无法解决BAE 上传图片的问题. 在阅读了 http://blog.csdn.net/auver/article/details/10103789 和 http:// ...
- Kafka vs RocketMQ——多Topic对性能稳定性的影响
引言 上期我们对比了RocketMQ和Kafka在多Topic场景下,收发消息的对比测试,RocketMQ表现稳定,而Kafka的TPS在64个Topic时可以保持13万,到了128个Topic就跌至 ...
- [转]Java中BigDecimal的使用
原文地址:https://blog.csdn.net/cen_s/article/details/76472834 在日常开发中我们经常会碰到小数计算,而小数直接计算的话会出现一些小小的错误,如下 S ...
- git 修改上次提交信息 与 撤销此操作.
git commit --amend 修改刚才提交的commit信息 撤销 git commit --amend 思路是使用 git reflog 查看在哪里ammend的.找到HEAD{N}, N是 ...
- jquery复选框 选中事件 及其判断是否被选中_常用笔记
checkbox的change事件可监听是否选中状态,也可添加onclick事件. var dom=$('.checkbox'); 1. 判断checkbox是否被选中 var dom=$('.che ...
- jython 2.7.1 版本开发历史
很多技术一直感兴趣,在工作中没有太多实践的机会,但可以持续关注.Jython最初是Python on JVM,所以最初的名称是JPython,后续由于基于JVM可以有更多可能性,名字改为Jython. ...
- Extjs4.2 TreeView TreeStore 移除节点不触发delete(remove node don't trigger delete method)
当我们操作treeview的时候,新增节点,如果成功则新增node,如果失败的话我们不想node还显示出来,可以通过监听sync的failure事件,失败时候移除node,但是第一次肯定达到了预期效果 ...
- oozie 客户端常用命令
1.提交作业,作业进入PREP状态 oozie job -oozie http://localhost:11000/oozie -config job.properties -submit job: ...
- 稳定模式在RESTful架构中的应用
本文由 ImportNew - 乔永琪 翻译自 javaworld.欢迎加入翻译小组.转载请见文末要求. 分布式系统中保持网络稳定的五种方式 重试模式 超时模式 断路器模式 握手模式 隔离壁模式 倘若 ...
- js实现选集功能
项目中有个播放列表选集的需求,如下图: 现在展示的1-42集全部,我们如何实现这个选集的功能呢? 我的思路如下: 1.将这42集按每10集划分,并存入数组: 2.保存开始和结束位置,比如说1~10,开 ...