您好,登錄后才能下訂單哦!
本篇博客是我寫在離職后,昨天剛辭職和交接完任務(wù),準備離開。其實我有很多不舍,但是最終還是選擇了離開,許多苦楚都埋在我的心底。哎,趁回成都找工作的機會是該好好休息一下了。
在上篇我的jQuery動態(tài)表格插件中介紹了插件的基本使用方法.在實際運用的時候出現(xiàn)了一些其他的需求,所以插件再次升級,增加了一些輔助功能.
1:EnterToTab:$(“selector”). EnterToTab(),是的selector中的空間可以回車變?yōu)閠ab鍵使用,方便用戶的輸入。
代碼簡析: IE:
其他瀏覽器:主要針對firefox,因為ff中的時間的鍵值碼,是一個制度屬性,所以我們不能通過和ie一樣的方式來處理,只有我們自己處理是的下一個可以focus控件focus。
- View Code
- $("input,select", this).not(":button").not(":disabled,:hidden").live("keypress", function(evt) {
- if (evt.keyCode == 13) {
- var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(":disabled,:hidden");
- var index = fields.index(this);
- if (index > -1 && (index + 1) < fields.length) {
- fields.eq(index + 1).focus();
- }
- return false;
- }
- });
- 復制代碼
2:重新處理的計算列和匯總事件,在原來我們的事件直接綁定的change事件,這樣有時在我們的外部手動觸發(fā)更新的時候,不好的代碼容易出現(xiàn)循環(huán)調(diào)用,而導致內(nèi)存不足。所以事件采用了,jQuery的命名空間,change.Calculates。并提供了手動更新方法,$(“selector”).updateCalculates().
3:加入了事件處理,有時我們需要對控件或者樣式做一些特殊處理,但是由于table中有很多這樣的列是的我們不好定位,所以增加了一系列時間出入jQuery的table 行tr對象,以供特殊處理定位。
主要有:
addRowing:增加行前觸發(fā)事件:參數(shù)arg,屬性有cancel可以供取消增加操作,rowTemplate改變某一行的增加行模板。
addRowed:增加行以后,參數(shù)為行對象來定位,以供處理特殊的js控件,腳本執(zhí)行或者css樣式處理等等。
removeRowing:刪除行之前觸發(fā),參數(shù)cancel,可以取消操作,row為需要刪除的行對象。
removeRowed:刪除行之后觸發(fā)的事件。還沒有想到需要什么參數(shù),所以是一個{}對象。我覺得一般不需要什么特殊參數(shù)。
4:擴展的對html的控件支持,在上一個版本中默認支持,支持text,label,checkbox,radio,label,td,textarea的取值。其中radio取值選中value,checkbox取值為所有選中行value的“,”號分隔字符串。但是在我們的實際運用中還會用到一些特殊的js控件,如我實際中用到的Jquery EasyUi的ComboTree這些,需要上邊提供的事件addRowed中一些js處理,以及獲取值getSource中獲取值的處理,所以提供了,一個對數(shù)據(jù)取值getValue的自定義取值委托。
customerFunction: null, //column:列,func:獲取Value function
- 查看
- <script type="text/javascript">
- window.FiannceBudget = new Array(); //[200, 300, 200, 300, 44];
- window.FiannceBudget["1"] = 200;
- window.FiannceBudget["2"] = 402;
- window.FiannceBudget["5"] = 121;
- window.FiannceBudget["6"] = 345;//類型6(費用2-)自用的id)的預算額。
- window.TreeSource = [{
- "id": -1,
- "text": "費用1",
- "iconCls": "icon-ok",
- "children": [{
- "id": 1,
- "text": "公用",
- }, {
- "id": 2,
- "text": "自用",
- "state": "open"
- }]
- },
- {
- "id": -1,
- "text": "費用2",
- "iconCls": "icon-ok",
- "children": [{
- "id": 5,
- "text": "公用"
- }, {
- "id": 6,
- "text": "自用",
- "state": "open"
- }]
- }
- ];
- </script>
- 復制代碼
Html前臺代碼:
- View Code
- <div>
- <table style="width: 100%;" border="1" cellpadding="0" cellspacing="0" class="TableStyle">
- <thead>
- <tr>
- <td>
- 序號
- </td>
- <td>
- 費用類型
- </td>
- <td>
- 預算額
- </td>
- <td>
- 審批額
- </td>
- <td>
- 差補(預算額)
- </td>
- <td style="width: 150px;">
- <a class="add">
- <img alt="增加" src="Image/add.png" style="border: 0px; width: 16px; height: 16px" />增加</a>
- <a class="delete" style="cursor: hand;">
- <img alt="刪除" src="Image/delete.png" style="border: 0px; width: 16px; height: 16px" />刪除</a>
- </td>
- </tr>
- </thead>
- <tbody>
- <asp:Literal ID="Literal1" runat="server"></asp:Literal>
- <tr fixed="true" xmlitem="total"><!—匯總列-à
- <td colspan="2" align="center" style="">
- 合計:
- </td>
- <td>
- <input readonly='readonly' type="text" id="totalBudget" property='totalBudget' />
- </td>
- <td>
- <input readonly='readonly' type="text" id="totalReal" property='totalReal' />
- </td>
- <td>
- <input readonly='readonly' type="text" id="totalReduction" property='totalReduction' />
- </td>
- <td align="center">
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <asp:HiddenField ID="HiddenField1" runat="server" />
- Jquery dynamicTable code:
- <script type="text/javascript">
- $(function() {
- var rowTemplate = "<tr >" +
- "<td style='text-align: center;'>" +
- "<label class='rownum' property='SortNum'>" +
- " </label>" +
- "</td>" +
- "<td>" +
- "<input property='FinanceType' style=' width:200px;'/>" +
- "</td>"
- +
- "<td >" +
- "<input readonly='readonly' property='FinanceBudget'> " +
- " </td>" +
- " <td>" +
- " <input type='text' class='number' property='FinanceReal' />" +
- " </td>" +
- " <td >" +
- " <input readonly='readonly' property='FinanceReduction'> " +
- " </td>" +
- "<td align='center' style='width:150px; text-align:center;'><a class='deleterow' style='cursor:hand;'>" +
- "<img alt='刪除' src='Image/delete.png' style='border: 0px; width: 16px; height: 16px' />刪除</a></td>" +
- "</tr>";
- //初始化原來頁面ComboTree
- var ctree = $(":[property='FinanceType']");
- ctree.each(function() {
- $(this).combotree({ "onBeforeSelect": function(node) { if (node.id == -1) { return false; } }, "onChange": function(newvalue, oldvalue) {
- $(this).val(newvalue).trigger("change");
- }
- }).combotree("loadData", TreeSource.slice(0));
- });
- //
- var tab = $("table").dynamicTable(
- {
- addTrigger: ".add",
- removeTrigger: [{ selector: ".delete", handler: "first" }, { selector: ".deleterow", handler: "current"}],
- rowTemplate: rowTemplate,
- addPosition: -1,
- DefaultRowCount: 3,
- Calculates: [{ selector: "#totalBudget", column: "FinanceBudget", func: "sum" }, { selector: "#totalReal", column: "FinanceReal", func: "sum" }, { selector: "#totalReduction", column: "FinanceReduction", func: "sum"}],
- CalculatesColumn: [{ trigger: ["FinanceType", "FinanceReal"], column: 'FinanceBudget', func: function(o, rowobj, $tr) {
- var v = parseFloat(rowobj.FinanceType);
- v = window.FiannceBudget[v];
- $(o).val(v);
- var $FinanceReal = $tr.find(":[property='FinanceReal']");
- var v1 = parseFloat($FinanceReal.val());
- if (!isNaN(v1)) {
- if (v1 > v) {
- $FinanceReal.val(v);
- v1 = v;
- }
- } else {
- $FinanceReal.val(0.00); //
- v1 = 0;
- }
- var b = (v - v1);
- if (isNaN(b))
- b = 0;
- $tr.find(":[property='FinanceReduction']").val(b.toString());
- $($tr).parent().parent().updateCalculates(); //更新計算
- }
- }]
- ,
- addRowed: function(arg) {
- var ctree = $(":[property='FinanceType']", arg);
- var $FinanceBudget = $(":[property='FinanceBudget']", arg);
- ctree.combotree({ "onBeforeSelect": function(node) { if (node.id == -1) { return false; } }, "onChange": function(newvalue, oldvalue) {
- $FinanceBudget.val(window.FiannceBudget[newvalue]);
- ctree.val(newvalue);
- ctree.trigger("change.CalculatesColumn");
- }
- }).
- combotree("loadData", TreeSource.slice(0));
- }
- });
- $("#Button1").bind("click", function() {
- alert(tab.getSource({ saveSelector: "#HiddenField1" }));
- })
- $(".number").live("keyup", function() {
- this.value = this.value.replace(/[^-\d\.]/g, '');
- }).live("keydown", function(e) {
- if (e.which == 189) {
- // $(this).val(-1 * parseFloat($(this).val())).trigger("change");
- e.stopPropagation();
- e.preventDefault();
- } else if (e.which == 190) {
- if ($(this).val().indexOf(".") != -1) {
- e.stopPropagation();
- e.preventDefault();
- }
- }
- });
- });
- </script>
- 復制代碼
在上一篇文章我的jQuery動態(tài)表格插件中有人問我如果在后臺處理,數(shù)據(jù),我所以在本次demo中特別利用dataset處理成為datatable:這里的處理時存在一個靜態(tài)變量ds中。
- View Code
- public partial class dynamicTableDemo1 : System.Web.UI.Page
- {
- private static System.Data.DataSet ds;
- protected void Page_Load(object sender, EventArgs e)
- {
- if (IsPostBack)
- {
- }
- }
- protected void BindTable()
- {
- if (ds != null && ds.Tables["item"] != null)
- {
- List<string> list = new List<string>();
- foreach (System.Data.DataRow item in ds.Tables["item"].Rows)
- {
- list.Add(string.Format("<tr >" +
- "<td style='text-align: center;'>" +
- "<label class='rownum' property='SortNum'>" +
- " </label>" +
- "</td>" +
- "<td>" +
- "<input property='FinanceType' style=' width:200px;' {0}/>" +
- "</td>"
- +
- "<td >" +
- "<input readonly='readonly' property='FinanceBudget' {1}> " +
- " </td>" +
- " <td>" +
- " <input type='text' class='number' property='FinanceReal' value='{2}' />" +
- " </td>" +
- " <td >" +
- " <input readonly='readonly' property='FinanceReduction' value='{3}'> " +
- " </td>" +
- "<td align='center' style='width:150px; text-align:center;'><a class='deleterow' style='cursor:hand;'>" +
- "<img alt='刪除' src='Image/delete.png' style='border: 0px; width: 16px; height: 16px' />刪除</a></td>" +
- "</tr>", item["FinanceType"].ToString() == "" ? "" : "value='" + item["FinanceType"] + "'", item["FinanceBudget"].ToString() == "" ? "" : "value='" + item["FinanceBudget"] + "'", item["FinanceReal"], item["FinanceReduction"]));
- }
- Literal1.Text = string.Join("",list.ToArray());
- }
- }
- protected void button1_click(object sender, EventArgs e)
- {
- var xml = HiddenField1.Value;
- ds = new System.Data.DataSet();
- ds.ReadXml(new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml)));
- BindTable();
- }
- }
- 復制代碼
最后在上效果圖:
后臺數(shù)據(jù)源:
插件基本使用請參見:我的jQuery動態(tài)表格插件
本博客中其他jQuery資料:我jQuery系列之目錄匯總
插件下載
搜集數(shù)據(jù)源xml例如:customerFunction: { "age": function(o) { return o.val() + 1; } },這里定義property為age的取值方式為:其值+1。Jquery EasyUi的ComboTree那么我們可以定義為
customerFunction: { "type": function(o) { return $(o).combotree(“getValue”)} }.
5:默認行數(shù), DefaultRowCount,在我們的處理中用戶經(jīng)常會要求你能不能初始化就給我們默認幾行啊,我難得一個一個的點擊增加。如果你也有這樣的需求,那么這個屬性就可以幫助你輕松的搞定了。
6:增加了xml搜集類型的節(jié)點名自定義,在我們的某些處理中為了,搜集某些固定行的數(shù)據(jù),但是為對xml其他節(jié)點的區(qū)分,所以,在本次的版本中增加了一個xmlitem,如xmlitem="total"設(shè)置。這個需要時來自我的一個同事的動態(tài)行,以及還有動態(tài)增加列的需要處理中。
jQuery dynamicTable版本仍會隨著用戶的需求一步一步的更新。同時也希望大家提出你的寶貴意見,你認為還需要那些功能,或者是對于代碼的重構(gòu)等等。
下面來一個jQuery EasyUi ComboTree的的demo:一個資金預算審批的例子。
先定義費用類型,和combotree的本地數(shù)據(jù)源,實際中需要我們從后臺輸出的。
- View Code
- if ($.browser.msie) {
- $(host).live("keydown", function(evt) {
- if (event.keyCode == 13) {
- event.keyCode = 9;//將鍵值13轉(zhuǎn)化為9(tab);
- }
- });
- }
- 復制代碼
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。