JS怎么设置bootstrap可编辑表格格的值

博客访问: 56134 博文数量: 12 博客积分: 1410 博客等级: 上尉 技术积分: 144 注册时间: IT168企业级官微 微信号:IT168qiye 系统架构师大会 微信号:SACC2013 分类: 系统运维 这里给出一种可动态增加、删除、修改和保存数据的web表格简易实现。思想很常规,javascript代码在关键地方给出了一些注释。有兴趣的朋友可以把玩一下。转载请注明出处! 先给出三张效果图: 图一:常态 图二:添加行状态 图三:修改列状态 panama_table.jsp <%@ page language="java" contentType="text/ charset=utf-8"&&&&pageEncoding="utf-8"%>Insert title here&&&&&&&&&&&&&&&&
全选/取消添加行删除行保存

郭佳陈珩王赢
蔡一覃晖彭杉
杨莉李英海杜宽
panama_table.js /**&* Panama-ajaxtools: panama_table&* @version: 0.1 beta 1&* @date: Oct 5th 2008&* @author: yunyuaner&* @contact: &*/function SwitchToEditMode(){&&&&var value = this.innerHTML;&&&&if (this.__mode == "plain")&&&&{&&&&&&&&this.__mode = "edit";&&&&&&&&var input = document.createElement("input");&&&&&&&&input.id = "__curr";&&&&&&&&input.type = "text";&&&&&&&&input.value = value;&&&&&&&&input.style.width = 60;&&&&&&&&input.style.height = 20;&&&&&&&&input.onblur = SwitchToPlainMode;&&&&&&&&this.replaceChild(input, this.firstChild);&&&&&&&&input.focus();&&&&}}function SwitchToPlainMode(){&&&&var parent = this.parentNode;&&&&parent.innerHTML = this.value;&&&&parent.__mode = "plain";}function PanamaTableInit(){&&&&&&&&PanamaTableInvalidate();}function PanamaTableInvalidate(){&&&&var pTable = document.getElementById("panama_table");&&&&var pTableRows = pTable.getElementsByTagName("tr");&&&&for (var i = 0; i < pTableRows.length; i++)&&&&{&&&&&&&&pTableCells = pTableRows[i].getElementsByTagName("td");&&&&&&&&pTableRows[i].className = i % 2 ? "panama_table_row_odd" : "panama_table_row_even";&&&&&&&&for (var j = 1; j < pTableCells.length; j++)&&&&&&&&{&&&&&&&&&&&&pTableCells[j].className = "panama_table_cell";&&&&&&&&&&&&pTableCells[j].onclick = SwitchToEditMode;&&&&&&&&&&&&if (pTableCells[j].__mode == null)&&&&&&&&&&&&&&&&pTableCells[j].__mode = "plain";&&&&&&&&}&&&&}&&&&/* Exclusive of checkbox filed */&&&&pTable.__cellsPerRow = 3;}function PanamaTableGetRowNodeFromCellElem(e){&&&&return e.parentNode.parentNode;}function PanamaTableDeleteRow(){&&&&var pTable = document.getElementById("panama_table");&&&&var rowsToDel = new Array();&&&&var chkboxFileds_NoFiltered = pTable.getElementsByTagName("input");&&&&/* Select the rows to be delete */&&&&for (var i = 0, j = 0; i < chkboxFileds_NoFiltered.length; i++)&&&&{&&&&&&&&if (chkboxFileds_NoFiltered[i].type == "checkbox" && chkboxFileds_NoFiltered[i].checked)&&&&&&&&{&&&&&&&&&&&&rowsToDel[j++] = PanamaTableGetRowNodeFromCellElem(chkboxFileds_NoFiltered[i]);&&&&&&&&&&&&&&&&&&&&}&&&&}&&&&for (var k = 0; k < rowsToDel.length; k++)&&&&{&&&&&&&&/* Note: pTable.firstChild of pTable is tbody */&&&&&&&&pTable.firstChild.removeChild(rowsToDel[k]);&&&&}&&&&PanamaTableInvalidate();}function PanamaTableAppendRow(){&&&&var pTable = document.getElementById("panama_table");&&&&var newRow = document.createElement("tr");&&&&var newCells = new Array();&&&&var cellInputs = new Array();&&&&var chkboxFiledContainer = document.createElement("td");&&&&var chkboxFiled = document.createElement("input");&&&&chkboxFiled.type = "checkbox";&&&&chkboxFiledContainer.appendChild(chkboxFiled);&&&&newRow.appendChild(chkboxFiledContainer);&&&&chkboxFiled.focus();&&&&&&&&for (var i = 0; i < pTable.__cellsPerRow; i++)&&&&{&&&&&&&&newCells[i] = document.createElement("td");&&&&&&&&newCells[i].__mode = "edit";&&&&&&&&cellInputs[i] = document.createElement("input");&&&&&&&&cellInputs[i].type = "text";&&&&&&&&cellInputs[i].style.width = 60;&&&&&&&&cellInputs[i].style.height = 20;&&&&&&&&newCells[i].appendChild(cellInputs[i]);&&&&&&&&newRow.appendChild(newCells[i]);&&&&}&&&&&&&&/* Note: pTable.firstChild of pTable is tbody */&&&&pTable.firstChild.appendChild(newRow);&&&&/* Rebuild table to set table style */&&&&PanamaTableInvalidate();}function PanamaTableSelAll(){&&&&var cbList = document.getElementById("panama_table").getElementsByTagName("input");&&&&var status = this.checked ? false : true;&&&&for (var i = 0; i < cbList.length; i++)&&&&&&&&cbList[i].checked = status;&&&&&&&&this.checked = status;}function PanamaTableSave(){&&&&var pTable = document.getElementById("panama_table");&&&&var rows = pTable.getElementsByTagName("tr");&&&&&&&&/* Change new row from edit mode to plain mode */&&&&for (var i = 0; i < rows.length; i++)&&&&{&&&&&&&&cells = rows[i].getElementsByTagName("td");&&&&&&&&/* Skip the chkbox filed */&&&&&&&&for (var j = 1; j < cells.length; j++)&&&&&&&&{&&&&&&&&&&&&if (cells[j].firstChild.nodeName.toLowerCase() == "input")&&&&&&&&&&&&{&&&&&&&&&&&&&&&&/* FIXME: value may be null */&&&&&&&&&&&&&&&&cells[j].innerHTML = cells[j].firstChild.value;&&&&&&&&&&&&&&&&cells[j].__mode = "plain";&&&&&&&&&&&&}&&&&&&&&} &&&&}&&&&&&&&/* Parse data in table */&&&&var tableTextList = new Array();&&&&for (i = 0; i < rows.length; i++)&&&&{&&&&&&&&var rowTextList = new Array();&&&&&&&&var cells = rows[i].getElementsByTagName("td");&&&&&&&&for (j = 1; j < cells.length; j++)&&&&&&&&&&&&rowTextList[j-1] = cells[j].innerHTML;&&&&&&&&tableTextList[i] = rowTextList;&&&&}&&&&var xmlDoc = "";&&&&xmlDoc += "";&&&&for (var m = 0; m < tableTextList.length; m++)&&&&{&&&&&&&&xmlDoc += ""&&&&&&&&for (var n = 0; n < tableTextList[m].length; n++)&&&&&&&&{&&&&&&&&&&&&xmlDoc += "" + tableTextList[m][n] + "";&&&&&&&&}&&&&&&&&xmlDoc += ""&&&&}&&&&xmlDoc += "";&&&&xmlDoc += "";&&&&/* Note: Encode string from iso-8859-1 to uri */&&&&xmlDoc = encodeURIComponent(xmlDoc);&&&&/* Post data to hidden iframe */&&&&var hiddenIframe = document.createElement("iframe");&&&&hiddenIframe.style.display = "none";&&&&hiddenIframe.src = "about:blank";&&&&hiddenIframe.id = "hiddenIframe"&&&&document.body.appendChild(hiddenIframe);&&&&var hiddenIframe = document.getElementById("hiddenIframe");&&&&var hiddenDocument = hiddenIframe.contentWindow.document;&&&&var hiddenSrc = " ";&&&&hiddenDocument.open();&&&&hiddenDocument.write(hiddenSrc);&&&&hiddenDocument.close();&&&&var hiddenForm = hiddenDocument.getElementById("hiddenForm");&&&&var hiddenXMLTmpBox = hiddenDocument.getElementById("hiddenXMLTmpBox");&&&&hiddenXMLTmpBox.value = xmlDoc;&&&&hiddenForm.action = "http://localhost:8080/biobase/poweroper/iframe/autosync.action";&&&&hiddenForm.submit();} AutoSync.java package biobase.experi;import java.io.*;import java.nio.*;import java.nio.charset.*;import java.nio.channels.*;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import java.net.*;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class AutoSync extends ActionSupport {&&&&private InputStream inputStream;&&&&private String hiddenXMLTmpBox;&&&&public InputStream getInputStream() {&&&&&&&&return inputStream;&&&&}&&&&public String getHiddenXMLTmpBox() {&&&&&&&&return hiddenXMLTmpBox;&&&&}&&&&public void setHiddenXMLTmpBox(String tmpBox) {&&&&&&&&hiddenXMLTmpBox = tmpBox;&&&&}&&&&public void setInputStream(InputStream inputStream) {&&&&&&&&this.inputStream = inputStream;&&&&}&&&&public String execute()&&&&{&&&&&&&&try {&&&&&&&&&&&&/* TODO: Parse dirtyTableXML and save */&&&&&&&&&&&&String dirtyTableXML = URLDecoder.decode(hiddenXMLTmpBox, "UTF-8");&&&&&&&&&&&&System.out.println(dirtyTableXML);&&&&&&&&} catch (UnsupportedEncodingException e) {&&&&&&&&&&&&e.printStackTrace();&&&&&&&&}&&&&&&&&StringBuilder xmlText = new StringBuilder();&&&&&&&&xmlText.append("");&&&&&&&&xmlText.append("");&&&&&&&&&&&&&&xmlText.append("");&&&&&&&&String strXMLText = xmlText.toString();&&&&&&&&Charset cset = Charset.forName("utf-8");&&&&&&&&ByteBuffer b = cset.encode(strXMLText);&&&&&&&&this.inputStream = new ByteArrayInputStream(b.array());&&&&&&&&&&&&&&&&return SUCCESS;&&&&}&&&&} struts.xml &&&&&&&&&&&&&&&&&&&&&&&& 阅读(7128) | 评论(0) | 转发(0) | 相关热门文章 给主人留下些什么吧!~~ 请登录后评论。button.css 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。 button.css 由 100素材网开发,欢迎广大前端码农使用。有好的建议欢迎给我们哦! 可双击编辑table表格里数据的jQuery插件代码 发布时间: 17:04:59 Copyright @ 2014-, All Rights Reserved温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&& LOFTER精选 网易考拉推荐 用微信&&“扫一扫” 将文章分享到朋友圈。 用易信&&“扫一扫” 将文章分享到朋友圈。 & & & & 市委考核系统中,用户有了新的要求。达到的效果& & & & 描述:档次字段双击实现添加功能,选中修改的字段,点击保存添加到数据库中,点击撤销,修改的字段值返回到初始的值。具体实现& & & & 总成绩的汇总是动态进行的,要想实现添加档次字段,并且保存它,需要添加相应的表进行保存相应的值,这里添加的表中的字段,仅仅有对象ID,年份,档次,这样是为了达到这样的效果,实现成绩的动态计算,且保存档次字段值。& & & & 具体的显示逻辑:获得每个对象的总成绩汇总,形成一个虚拟表,从新添加的物理表中获得该年份所有对象ID和对应的档次,将这两个虚拟表进行拼接,然后显示出来。具体的修改逻辑:用户提交修改的记录,然后根据提交对象ID和年份,查询添加表,看看是否存在该条记录,存在则更新,不存在则添加。& & & & 对于后台的代码,主要是通过文字的形式描述的,对于页面上,这里提供出主要的代码,有兴趣的自己可以看一下。& & & &页面核心代码&script type="text/javascript"& $.extend($.fn.datagrid.methods, { editCell: function (jq, param) { return jq.each(function () { var opts = $(this).datagrid('options'); var fields = $(this).datagrid('getColumnFields', true).concat($(this).datagrid('getColumnFields')); for (var i = 0; i & fields. i++) { var col = $(this).datagrid('getColumnOption', fields[i]); col.editor1 = col. if (fields[i] != param.field) { col.editor = $(this).datagrid('beginEdit', param.index); for (var i = 0; i & fields. i++) { var col = $(this).datagrid('getColumnOption', fields[i]); col.editor = col.editor1; var editIndex = //结束编辑 function endEditing() { if (editIndex == undefined) { return true } if ($('#dg').datagrid('validateRow', editIndex)) { $('#dg').datagrid('endEdit', editIndex); editIndex = //双击事件 function onDblClickCell(index, field) { if (endEditing()) { $('#dg').datagrid('selectRow', index) .datagrid('editCell', { index: index, field: field }); editIndex = //保存按钮,多条数据一起提交 function saveAllData() { if (endEditing()) { //获取年份 var checkedYearValue = $("#cc1").combobox('getText'); //DataGrid的更改行不为0 if ($("#dg").datagrid('getChanges').length) { //获取插入更改的行的集合 var inserted = $("#dg").datagrid('getChanges', "inserted"); //获取删除更改的行的集合 var deleted = $("#dg").datagrid('getChanges', "deleted"); //获取更新更改的行的集合 var updated = $("#dg").datagrid('getChanges', "updated"); var effectRow = new Object(); if (inserted.length) { effectRow["inserted"] = JSON.stringify(inserted); if (deleted.length) { effectRow["deleted"] = JSON.stringify(deleted); if (updated.length) { effectRow["updated"] = JSON.stringify(updated); var row = $('#dg').datagrid('getSelections'); if (row.length & 1) { $.messager.alert('提示', '请至少选择一条数据!', 'info'); if (row.length &= 1) { for (var i = 0; i & row. i++) { var Data = row[i].县市区ID; if (Data == "" || Data == null) { alert("没有数据"); $('#dg').datagrid('unselectRow', i); row = $('#dg').datagrid('getSelections'); //用户向一般处理程序传值 var type = "Town"; var data1 = new Object(); var obj = new Object(); obj.yearValue = checkedYearV data1.array = data1.obj = data1.type = var jsonObject = JSON.stringify(data1); $.post("FourTypeResultLevel.ashx", { jsonObject: jsonObject }, function (data) { alert(data); //撤销按钮 function reject() { $('#dg').datagrid('rejectChanges'); editIndex = &/script&&table id="dg" title="干部总成绩" class="easyui-datagrid" striped="true" style="width: &%=width %&px" autoRowHeight="true" data-options="iconCls: 'icon-edit', toolbar: '#tb', url:'TownResultsTotal.ashx', method:'get', onDblClickCell: onDblClickCell" pagination="false" rownumbers="true" fitcolumns="true" singleSelect="false" & &tr id="jsTh"& &div id="tb" style="height: auto"& &a href="javascript:void(0)" id="saveButton" class="easyui-linkbutton" data-options="iconCls:'icon-save',plain:true" onclick="saveAllData()"&保存&/a& &a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-undo',plain:true" onclick="reject()"&撤销&/a& &/div&& & & & 注意:1、DataGrid的表头要注册双击事件对应的相应函数名;2、对于DataGrid中行的状态只有修改状态,但是在程序中还是写出了其他的的其中状态。总结& & & & 这里用到的EasyUI中的控件,所以需要引用一些CSS和JS等内容,其他的具体东西大家可以去晚上搜一下。& & & & 阅读(22552)| 用微信&&“扫一扫” 将文章分享到朋友圈。 用易信&&“扫一扫” 将文章分享到朋友圈。 历史上的今天 loftPermalink:'', id:'fks_', blogTitle:'实现EasyUI中DataGrid单个表格的编辑', blogAbstract:'背景& & & & 市委考核系统中,用户有了新的要求。达到的效果& & & & 描述:档次字段双击实现添加功能,选中修改的字段,点击保存添加到数据库中,点击撤销,修改的字段值返回到初始的值。具体实现& & & & 总成绩的汇总是动态进行的,要想实现添加档次字段,并且保存它,需要添加相应的表进行保存相应的值,这里添加的表中的字段,仅仅有对象ID,年份,档次,这样是为了达到这样的效果,实现成绩的动态计算,且保存档次字段值。& & & & 具体的显示逻辑:获得每个对象的总成绩汇总,形成一个虚拟表,从新添加的物理表中获得该年份所有对象ID和对应的档次,将这两个虚拟表进行拼接,然后显示出来。具体的修改逻辑:用户提交修改的记录,然后根据提交对象ID和年份,查询添加表,看看是否存在该条记录,存在则更新,不存在则添加。', blogTag:'', blogUrl:'blog/static/', isPublished:1, istop:false, modifyTime:7, publishTime:7, permalink:'blog/static/', commentCount:13, mainCommentCount:11, recommendCount:1, bsrk:-100, publisherId:0, recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[], groupInfo:{}, friendstatus:'none', followstatus:'unFollow', pubSucc:'', visitorProvince:'', visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000', remindgoodnightblog:false, isBlackVisitor:false, isShowYodaoAd:false, hostIntro:'', hmcon:'1', selfRecomBlogCount:'0', lofter_single:'' {list a as x} {if x.moveFrom=='wap'} {elseif x.moveFrom=='iphone'} {elseif x.moveFrom=='android'} {elseif x.moveFrom=='mobile'} ${a.selfIntro|escape}{if great260}${suplement}{/if} {list a as x} 推荐过这篇日志的人: {list a as x} {if !!b&&b.length>0} 他们还推荐了: {list b as y} 转载记录: {list d as x} {list a as x} {list a as x} {list a as x} {list a as x} {if x_index>4}{break}{/if} ${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')} {list a as x} {if !!(blogDetail.preBlogPermalink)} {if !!(blogDetail.nextBlogPermalink)} {list a as x} {if defined('newslist')&&newslist.length>0} {list newslist as x} {if x_index>7}{break}{/if} {list a as x} {var first_option =} {list x.voteDetailList as voteToOption} {if voteToOption==1} {if first_option==false},{/if}&&“${b[voteToOption_index]}”&& {if (x.role!="-1") },“我是${c[x.role]}”&&{/if} &&&&&&&&${fn1(x.voteTime)} {if x.userName==''}{/if} 网易公司版权所有&& {list x.l as y} {if defined('wl')} {list wl as x}{/list}

我要回帖

更多关于 bootstrap可编辑表格 的文章

 

随机推荐