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 ...
随机推荐
- playbook实现nginx安装
1. 先在一台机器上编译安装好nginx,然后打包 tar -zcvf nginx.tar.gz /usr/local/nginx --exclude=conf/nginx.conf --exclud ...
- 【Head First Servlets and JSP】笔记 27: web 应用安全
典型的安全问题:假冒者.窃听者.非法升级者 认证方式: Base64 .摘要认证 .客户端证书.表单认证,重点熟悉摘要算法( HASH . MD5 等) 安全机制:授权.认证.数据完整性.机密性 80 ...
- Base64转Blob
最近碰见一个问题,a链接的href为base64,但在chrome下载时显示下载失败,经查询,base64过大会在某些浏览器上下载失败(如新版chrome),解决方法是将base64转为blob fu ...
- java第四周学习总结
学号20145336 <Java程序设计>第4周学习总结 教材学习内容总结 继承 继承符合(Don't Repeat Yourself)原则,即在自己的代码中不要重复自己编写的信息,这在多 ...
- Python多版本共存管理工具之pyenv
目录 Table of Contents 1. 安装pyenv 2. 安装Python 3.0 使用python 参考 Table of Contents 经常遇到这样的情况: 系统自带的Python ...
- iOS开发进阶 - 基于PhotoKit的图片选择器
移动端访问不佳,请访问我的个人博客 很早之前就用OC把代码写完了并用在项目中了,一直没时间整理,现在用swift重写一份,并且更加详细的来了解这个Photos框架,下面是我集合苹果官方文档和其他大神的 ...
- Fatal error compiling: java.lang.NoSuc hFieldError??
用了两天时间,试了各种方法,问题最终解决.是JDK的版本问题:Maven3.5不支持jdk-9.0.1,最后退回:jdk1.8.0_151,问题圆满解决!! [ERROR] Failed to exe ...
- erwin逆向工程,logical模型列名修改为中文
逆向工程,应该选择physical template,这样拷贝到logical/physical 模型中,才可以将logical模型的列名修改为中文.
- UVa 11149 矩阵的幂(矩阵倍增法模板题)
https://vjudge.net/problem/UVA-11149 题意: 输入一个n×n矩阵A,计算A+A^2+A^3+...A^k的值. 思路: 矩阵倍增法. 处理方法如下,一直化简下去直到 ...
- js数组与字符串的相互转换
一.数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var a, b,c; a = new Array(a,b,c,d,e); b = a.join('-'); //a-b-c-d ...