JTable的应用
最近项目中使用到一个table表格,表格的样子如下:

可以修改数量,以及折扣,对应的最终价会相应的变化。
随手写了份插件,命名为JTable,可以给热爱jquery 的友友们一个参考:
代码如下:
/**
* Created by oshine on 14-7-23.
*/
(function($){
var JTable = function(setting){ var defaultSetting = { header:["服务内容","数量","单价(元)","总价(元)","量词","原价(元)","折扣","最终价(元)"],
items:[
{name:"默认内容1",num:1,defaultPrice:300},
{name:"默认内容2",num:1,defaultPrice:300},
{name:"默认内容3",num:1,defaultPrice:300},
{name:"默认内容4",num:1,defaultPrice:300}
],
unit:"半年",
discount:100,
serve_id:0,
id:0
}; setting = $.extend(defaultSetting,setting); this.header = setting.header;
this.container = setting.container;
this.items = setting.items;
this.discount = setting.discount*100;
this.unit = setting.unit;
this.serve_id = setting.serve_id;
this.name = setting.name;
this.default_price = setting.default_price;
this.id = setting.id;
this.isDesign = setting.isDesign;
this.init();
} JTable.prototype = {
init:function(){ var self = this;
self.refresh();
},
refresh:function(){
var self = this;
console.dir(self.items);
$(self.container).html(self.buildTable()+self.buildData()); $(self.container).find("input[name=child-num]").unbind();
$(self.container).find("input[name=child-num]").change(function(){ var k = $(this).parent().parent().attr("data-id");
self.items[k].num = $(this).val(); self.refresh();
}); $(self.container).find("input[name=package-discount]").change(function(){
self.discount = $(this).val();
self.refresh();
}); }, buildTable:function(){
return "<table>"+this.buildHeader()+this.buildBody()+"</table>";
}, jsonData:function(){
return JSON.stringify({id:this.id,serve_id:this.serve_id,isDesign:this.isDesign,name:this.name,default_price:this.default_price,discount:this.discount,unit:this.unit,cost_price:this.getCostPrice(),final_price:this.getFinalPrice(),items:this.items});
},
buildData:function(){
return "<input type='hidden' contract='true' value='"+this.jsonData()+"' name='data'/>";
}, buildHeader:function(){ var html = "<thead><tr>"; $.each(this.header,function(k,v){
html+="<th>"+v+"</th>";
})
return html+"</tr></thead>";
}, getCostPrice:function(){
var costPrice = 0; $.each(this.items,function(k,v){costPrice+=(v.num* v.defaultPrice);});
return costPrice;
},
getFinalPrice:function(){
return this.getCostPrice()*(this.discount/100);
},
buildBody:function(){
var self = this;
var html = "<tbody>";
var length = self.items.length;
$.each(this.items,function(k,v){
var tr = "<tr data-id="+k+">";
if(k==0){
tr+='<td class="item-name">'+ v.name+'</td>'+
'<td><input class="text-field" type="text" value="'+ v.num+'" name="child-num"></td>'+
'<td>'+ v.defaultPrice+'</td>'+
'<td>'+ (v.num*v.defaultPrice)+'</td>'+
'<td rowspan="'+ length+'">'+self.unit+'</td>'+
'<td rowspan="'+length+'">'+self.getCostPrice()+'</td>'+
'<td rowspan="'+ length+'"><input class="text-field" type="text" value="'+self.discount+'" name="package-discount"/>%</td>'+
'<td rowspan="'+ length+'">'+self.getFinalPrice()+'</td>';
}else
{
tr+='<td class="item-name">'+ v.name+'</td>'+
'<td><input class="text-field" type="text" value="'+ v.num+'" name="child-num"></td>'+
'<td>'+ v.defaultPrice+'</td>'+
'<td>'+ (v.num*v.defaultPrice)+'</td>';
}
tr+="</tr>";
html+=tr;
});
return html+"</tbody>";
}
} $.fn.extend({
JTable:function(){
var data = eval('('+$(this).attr("data")+')');
var setting = $.extend({container: $(this)},data);
return new JTable(setting);
}
});
})($);
使用:
HTML:
<div data="{'id':'7073','quoted_id':'616','uid':'176','serve_id':'2','name':'无线端站外推广套餐','default_price':'16800.00','discount':'0.9000','final_price':'15120.00','percentage':null,'description':'','unit':'季度','children':null,'is_design':null,'items':[{'id':'57760','packageId':'7073','name':'无线站外推广','num':'3','defaultPrice':'2400.00','unit':'季度','finalPrice':'7200.00','isDesign':null},{'id':'57761','packageId':'7073','name':'无线站外推广维度优化','num':'1','defaultPrice':'1200.00','unit':'季度','finalPrice':'1200.00','isDesign':null},{'id':'57762','packageId':'7073','name':'无线站外推广周报(数据分析+优化建议)','num':'1','defaultPrice':'2400.00','unit':'季度','finalPrice':'2400.00','isDesign':null}]}" class="constract-JTable">
</div>
Javascript:
$(document).ready(function(){
$(".constract-JTable").JTable();
});
代码写的一般般,可以优化下哦。
JTable的应用的更多相关文章
- swing中JTable的使用方法
public static void main(String[] args) { Student s1 = new Student("张三", "001", 0 ...
- Jtable 表格按多列排序(支持中文汉字排序)
这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...
- Java — JTree and JTable以及sqlServer的两种连接
使用JTree的步骤: 暂时只能创建一个头结点,创建一个树的结点作为头结点(其子结点也是相同的创建方法):DefaultMutableTreeNode headNode = new DefaultMu ...
- ABP JTable如何手动刷新子表数据
function getSubMaster() { _$masterTable.find('.jtable-child-table-container').jtable('reload'); }
- jtable插件api
官网2016-03-15 事例图: 一.客户端配置 1. paging boolean default:false 配置是否分页,果断改为true. 2. pageList string defaul ...
- ASP.NET ZERO 学习 JTable的使用子表闭合功能
双击子表自动判定开闭功能 //CHILD TABLE DEFINITION FOR "PHONE NUMBERS" Phones: { title: '', width: '5%' ...
- ASP.NET ZERO 学习 JTable的ChildTable用法
效果图: Jtable的子表用法: _$masterTable.jtable({ title: app.localize('PharmacyInventory'), openChildAsAccord ...
- jtable更新数据
static JTable table; public void refrushTableData() { String[] columnNames = { " }; String[][] ...
- 实现Java JTable的应用案例
代码如下 import Java.awt.Component; import java.awt.Dimension; import java.awt.FontMetrics; import javax ...
- JavaSE GUI显示列表 JTable的刷新 重新加载新的数据
JTable在显示所有数据之后,假如需要搜索某个名字,则会获取新的列表数据. 假设datas是JTable的数据,定义为: private Vector<Vector> datas = n ...
随机推荐
- 两个java小练习
网上看到的一个小练习,自己写了一个,但是时间限制并不符合,并且貌似还有些小问题,暂时放在这儿,代码格式什么的也不太规范. 1.班级排名时间限制: 1000ms 内存限制: 65536kB 描述 信息科 ...
- Java基础知识---continue
一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: ...
- Swoole学习(二)Swoole之TCP服务器的创建
环境:Centos6.4,PHP环境:PHP7 <?php //创建TCP服务器 /** * $host 是swoole需要监听的ip,如果要监听本地,不对外服务,那么就是127.0.0.1;如 ...
- PHP秒杀系统全方位设计分析(二)
商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...
- Visual Studio 2015 初体验
据微软介绍每次发布的新版本,都承载着为开发者提供最高效的Visual Studio开发体验的使命.Visual Studio 2015亦延续了这一趋势,为开发者带来了进一步的生产力创新,包括调试和诊断 ...
- powershell 设置环境变量 -- go 单元测试 exit status 3221225781
执行单元测试时出错 go test -run TestImage 错误提示如下: exit status 3221225781 这个错误的意思是需要加载对应的库文件找不到,加载对应的库文件就习. 但是 ...
- 在VMware中使用Nat方式设置静态IP
为了在公司和家中不改变ip,所以采用vm的NAT模式来设置静态ip 1.vm采用NAT模式联网 2.编辑vm虚拟机设置 3.查看该网段的网关 可以看出网关为192.168.44.2,然后开始设置静态i ...
- mysql系列之多实例介绍
介绍: mysql多实例,简单理解就是在一台服务器上,mysql服务开启多个不同的端口(如3306.3307),运行多个服务进程.这些 mysql 服务进程通过不同的 socket来监听不同的数据端口 ...
- MysQL使用一与Python交互
与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...
- iOS开发进阶 - 富文本正则替换表情
移动端访问不佳,请访问我的个人博客 最近写项目需要用到富文本解析字符串显示表情,下面是我使用正则替换实现富文本的方式,希望能帮助到大家 先上效果图和demo地址 实现过程中需要用到的知识点 NSReg ...