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 ...
随机推荐
- RabbitMQ 如何实现对同一个应用的多个节点进行广播
1.背景 了解过RabbitMQ的Fanout模式,应该知道它原本的Fanout模式就是用来做广播的.但是它的广播有一点区别,来回顾下它的含义:Fanout类型没有路由键的概念,只要队列绑定到了改ex ...
- [转]eclipse 配置黑色主题 Luna 方式三
虽然以前也使用eclipse的黑色主题,但是配置起来稍微麻烦一点. 这里先声明,下面的方式适合最新版本的Eclipse Luna,旧的版本可以下载我提供的这个插件,并将其放在eclipse目录下的 ...
- virtualbox安装centos7使用nat+hostonly的网络模式
win环境下的virtualbox下载地址:http://download.virtualbox.org/virtualbox/5.2.0/VirtualBox-5.2.0-118431-Win.ex ...
- ARTS Week 001
Algorithm Leetcode 1. Two Sum Given an array of integers, return indices of the two numbers such tha ...
- Jackson 框架JSON、XML、List、Map直接相互转换
博客分类: json 参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 在其基础上做了稍微调整 详情见附件 jacks ...
- .NET数据库编程求索之路--1.引子
转载:[ 夏春涛 email: xchuntao@163.com blog: http://www.cnblogs.com/SummerRain ] 长期做.NET MIS系统开发,打交到最多还是数 ...
- 2705: [SDOI2012]Longge的问题
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1898 Solved: 1191[Submit][Status][Discuss] Descripti ...
- uboot下ext4load的用法
将sd卡的某个分区下的某个目录里的某个文件加载到内存的某个地址,示例如下: ext4load mmc 0:1 0xa0000000 /bin/vi
- JAVA基础补漏--SET
HashSet: 1.无序集合. 2.底层是一个哈希表结构,查询速速很快. 哈希表==数据 + 链表/红黑树 特点:查询速度快. 存储数据到SET中: 1.计算数据的HASH值. 2.查看有没有相同H ...
- 使用Sandcastle 基于代码注释生成接口文档
一. 工具下载: 1. Sandcastle:Sandcastle是微软官方的文档生成工具,下载地址:http://www.codeplex.com/Sandcastle 2. SHFBGuidedI ...