首先,id 在一个页面中只能出现一次,是唯一的,class才可以多次出现!

声明

id 为唯一属性,即一个 html 文件中只能出现一个对应的 id,class 可以使用多个;

需求实现

前端部分大到框架,小到功能,都是可以用设计模式来解决的,说白了,都是可以用 MVC 来解决的,如你的的例子:

C -> 整个 JS 逻辑;

V -> 单行条目;

M -> 填充的数据;

你其实可以把这种东西进行闭包封装,或者做成一个处理类。如:

添加

计算期类型期间征收方式

继续完善脚本:

(function($) {

'use strict';

/**

* 组件条目解析

* 一行即一个组件条目,该构造方法

* 例:var thisRow = new AppRow();

* @return {object} 一个 jQuery 对象

*/

var AppRow = function() {

return this.rowParse(this.rowDom());

};

// HTML 结构

AppRow.prototype.rowDom = function() {

var row = '',

options = AppRow.typeChose,

optionYears = options[0].types;

// 计算期类型

row += '

';

row += '请选择';

for (var i in options) {

row += '' + options[i].name + '';

}

row += '

';

// 期间

row += '

';

// 征收方式

row += '

';

row += '请选择';

row += '查账征收';

row += '核定征收';

row += '

';

return '

' + row + '';

};

// 解析行结构,添加事件

AppRow.prototype.rowParse = function(row) {

var $row = $(row),

$typeTime = $row.find('select.type'),

$typeTypes = $row.find('.types'),

optionsData = AppRow.typeChose;

// 计算期类型

$typeTime.on('change.app', $.proxy(function(e) {

var val = $typeTime[0].value;

$typeTypes.children().remove();

$typeTypes.append(this.selectYears(val));

}, this));

return $row;

};

// 返回年度表单

AppRow.prototype.selectYears = function(type) {

var optionYears = AppRow.typeChose[0].types,

select = '',

$select = null;

// 构建表单

select += '';

select += '请选择';

for (var i in optionYears) {

select += '' + optionYears[i].years + '';

}

select += '';

// 构建成 jQuery 对象

$select = $(select);

// 事件绑定

$select.on({

// 选择事件

'change.app': $.proxy(function(e) {

var val = $select[0].value,

$sub = $select.next('.sub');

if (type <= 0) {

// 年终汇算无后续表单

return;

}

if (val === -1) {

// 未选择,则移除后续表单

$select.nextAll().remove();

return;

}

// 创建或或初始化后续表单

if (!$sub.get(0)) {

// 表单不存在则创建

$select.after(this.selectSub(type, val));

}

$sub.trigger('reset.app');

}, this),

// 重置表单

'reset.app': $.proxy(function(e) {

$select.find('option').prop('selected', false)

.eq(0)

.prop('selected', true);

})

});

return $select;

};

// 返回季度或月份表单

AppRow.prototype.selectSub = function(type, year) {

var optionData = AppRow.typeChose[type].types[year].zType_time1,

select = '',

$select = null;

if (!optionData) {

// 无数据

return;

}

// 构建表单

select += '';

select += '请选择';

for (var i in optionData) {

select += '' + optionData[i] + '';

}

select += '';

$select = $(select);

// 事件绑定

$select.on({

// 重置表单

'reset.app': $.proxy(function(e) {

$select.find('option').prop('selected', false)

.eq(0)

.prop('selected', true);

})

});

return $select;

};

// 联动数据 - zType_chose

AppRow.typeChose = [{

"name": "年终汇算",

"types": [{

"years": "2015年"

}, {

"years": "2016年"

}]

}, {

"name": "预缴-月度",

"types": [{

"years": "2015年",

"zType_time1": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]

}, {

"years": "2016年",

"zType_time1": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]

}]

}, {

"name": "预缴-季度",

"types": [{

"years": "2015年",

"zType_time1": ["第一季度", "第二季度", "第三季度", "第四季度"]

}, {

"years": "2016年",

"zType_time1": ["第一季度", "第二季度", "第三季度", "第四季度"]

}]

}];

AppRow.VERSION = '1.0.0';

// ===========================================

// 添加按钮事件绑定

var $addBtn = $('.button2'),

$rowList = $('#zType_all');

// 点击添加

$addBtn.on('click.app', function(e) {

// 或直接添加实例

$rowList.append(new AppRow());

});

})(jQuery);

解释

创建一个构造方法,用于生成一个具有交互封装效果的结构 —— 组件;

为组件添加一系列方法,并在内部创建逻辑;

闭包封装指仅 (function($){ /*code*/ })(jQuery); 中生效;

$.fn.remove可以保证页面的数据的安全性,切忌使用 $.fn.hide;

还可以生使用 AppRow.prototype.delete() 扩展删除操作等;

如果需要使用 name 做数据提交,则需使用 name="row[index][name]" 的格式,如:name="row[1]['type']"、name="row[1]['year']"、name="row[1]['sub']";

最终效果:

在线效果

html自动识别循环列表元素,动态添加的元素,怎么遍历它们的功能及内容相关推荐

  1. JavaScript实现向OL列表内动态添加LI元素的方法

    2019独角兽企业重金招聘Python工程师标准>>> <script type="text/javascript"> function addIte ...

  2. JavaScript实现动态添加的元素添加点击事件

    在页面开发过程中常常遇到需要动态添加元素,然后给这一元素绑定相关事件的情况,这种情况下一般需要给元素加上相关属性,然后写这些元素的事件函数即可.动态添加的元素怎么绑定事件呢? 原生JavaScript ...

  3. html页面forEach用法,jQuery教程之使用模板动态添加html元素,相当于jstl里的foreach...

    本篇文章探讨了jQuery教程之使用模板动态添加html元素,相当于jstl里的foreach,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 1.开发的时候有时候要循 ...

  4. jQuery给动态添加的元素绑定事件的方法

    jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...

  5. 动态添加html元素

    document.createElement()创建元素,再用appendChild( )添加 动态引入jquery: var scriptElement=document.createElement ...

  6. jquery append 动态添加的元素事件on 不起作用的解决方案

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  7. 动态添加html元素绑定事件,关于javascript:jQuery如何将onclick事件绑定到动态添加的HTML元素...

    本问题已经有最佳答案,请猛点这里访问. 我想将onclick事件绑定到用jquery动态插入的元素 但它从不运行绑定函数.如果您能指出这个示例为什么不起作用,以及如何使它正常运行,我将非常高兴: /p ...

  8. jQuery 为动态添加的元素绑定事件

    在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...

  9. 比较好玩的动态添加网页元素

    比较好玩的动态添加网页元素 javascript 有一些很有趣的功能.下面介绍三样小功能. 1.动态创建按键 2动态创建链接 3动态创建表格 效果如下: 源代码如下: <!DOCTYPE htm ...

最新文章

  1. C/C++运行时库 解释
  2. mantis1.18升级1.2X方法
  3. 经典排序算法(4)——折半插入排序算法详解
  4. 5G网络打破专有系统的桎梏
  5. 树莓派学习之路-GPIO Zero
  6. mysql写php木马_PHP一句话木马小总结与SQL语句写一句话木马
  7. 一些思维的碎片(二)
  8. dirty_ratio与dirty_background_ratio参数区别--系统优化必选
  9. 程序员这样面试,拿到offer的几率是非常大
  10. 检查通知是否被关闭_通知!大检查开始!一经发现,立即取缔关闭!
  11. 教你视频去色效果怎么操作
  12. Java实战推箱子——菜鸟之路
  13. 基于51单片机及MAX6675的8通道测温系统 protues仿真
  14. 【复习笔记】计算机网络求职考点整理
  15. R语言可视化回归模型的残差直方图并进行残差分析(Histogram of Residuals)
  16. 电影网站 php asp,asp电影网址导航大全 V20201218
  17. C++应用之自定义大整数类
  18. UI设计中标签设计总结
  19. 安全四大顶会论文查询
  20. 数值分析(二) 三次样条插值法matlab程序

热门文章

  1. ue4 服务器登陆流程
  2. Oracle数据库实现主键自增(利用sequence)和分页查询(利用rownum)
  3. SQL死锁知识及解决办法
  4. Java应用程序的基本框架
  5. 在WebStorm环境中给nodejs项目中添加packages
  6. web Api 返回json 的两种方式
  7. 在不停止mysql复制主服务器的情况下,配置一个mysql复制从服务器
  8. 转载-C#委托之多播委托( 二)
  9. 计算机应用节能环保,计算机应用的节能环保问题研究
  10. java部署到服务器乱码_java web项目发布到linux服务器上运行出现乱码