1. 程式人生 > >easyui行編輯:利用append row新增行,直接在行中編輯,ajax提交儲存

easyui行編輯:利用append row新增行,直接在行中編輯,ajax提交儲存

今天工作用到了easyui行編輯,在這裡總結一下,不會的同學可以看看,順便吐槽一下,網上的很多部落格都是貼上複製的,內容很亂 ,而且看不懂,不知道這些貼上複製的懷的是什麼心,不但沒用,還影響別人搜尋。
呼籲大家在寫部落格的時候認真一些,別隻貼上複製,至少可以自己執行好了貼上自己的程式碼和一點感想,對別人用處很大的。

好了,正題開始——>

我用的是easyui 1.4

效果如下:
點選新增按鈕,在第二行的位置新增新行,點選單元格輸入內容,點儲存通過ajax提交。
修改則直接點選單元格修改,點儲存提交。
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

程式碼如下:
首先table還是平常的table,只不過要在需要編輯的列加上editor:'text'

我這裡只是編輯文字,所以是text,其他時間等型別請查api,
另外因為我觸發修改的方式是直接點選單元格,所以table要加上onClickCell屬性,然後重寫onClickCell方法。

$("#remark_dg").datagrid({
            url:'',
            columns:[[ 
                {field:'cb',checkbox:true,align:'center'},
                {field:'id',title:'編號',width:80,hidden:true},
                {field:'text'
,title:'內容',width:80,editor:'text'} ]], toolbar:'#remark_tb', //表格選單 fit:true, fitColumns:true, loadMsg:'載入中...', //載入提示 rownumbers:true, //顯示行號列 singleSelect:true,//是允許選擇一行 onClickCell: onClickCell, queryParams:{ //在請求資料是傳送的額外引數,如果沒有則不用寫
}, onLoadSuccess:function(data){ }, rowStyler:function(index,row){ } });

簡單說明下可編輯的實現方法:
首先通過beginEdit讓選中的行啟動編輯,儲存的時候,獲得選中的行,通過row取到編輯的資訊,使用ajax提交,提交完成,使用endEdit屬性結束行編輯。

 //可編輯行
    var editIndex = undefined;
    function endEditing(){
        if (editIndex == undefined){return true}
        if ($('#remark_dg').datagrid('validateRow', editIndex)){
            $('#remark_dg').datagrid('endEdit', editIndex);
            editIndex = undefined;
            return true;
        } else {
            return false;
        }
    }
    function onClickCell(index, field){
        if (editIndex != index){
            if (endEditing()){
                $('#remark_dg').datagrid('selectRow', index)
                        .datagrid('beginEdit', index);
                var ed = $('#remark_dg').datagrid('getEditor', {index:index,field:field});
                ($(ed.target).data('textbox') ? $(ed.target).textbox('textbox') : $(ed.target)).focus();
                editIndex = index;
            } else {
                $('#remark_dg').datagrid('selectRow', editIndex);
            }
        }
    }
    function accept(){
        if (endEditing()){
            var row = $('#remark_dg').datagrid('getSelected');
            var text = row.text;
            var remarkid = row.id;
            var typeid = $("#typeid").val();
            $.ajax({
                url:"${ctx}/typeRemark/addTypeRemark.do",
                type:"post",
                dataType:"json",
                data:{
                    remarkid:remarkid,
                    text:text,
                    typeid:typeid
                },
                success:function(data){
                    if(data.status == "success"){
                        $.messager.show({
                            title : '提示',
                            msg : '操作成功'
                        });
                        $('#dg').datagrid('load', {});
                    }else{
                        $.messager.show({
                            title : '提示',
                            msg : '操作失敗,請聯絡管理員 ------'
                        });
                    }
                },
                error:function(){
                        $.messager.show({
                            title : '提示',
                            msg : '系統錯誤,請聯絡管理員------'
                        });
                }
            });
        }
    }
    function addRemark(){
         function addRemark(){
        if (editIndex != undefined){
            return ;
        }
        $('#remark_dg').datagrid('insertRow',{
            index: 1,   // 索引從0開始
            row: {
                text:''
            }
        });
        $('#remark_dg').datagrid('selectRow', 1);
        $('#remark_dg').datagrid('beginEdit', 1);
        var ed = $('#remark_dg').datagrid('getEditor', {index:1,field:'text'});
        $(ed.target).focus();
        editIndex = 1;
    }
    }

這裡有必要提一下,我的新增和修改方法用了一個方法accpet(),同時後臺也用一個方法處理的,有需要的可以借鑑一下:
表現層用的是spring mvc,持久成用的hibernate:

@RequestMapping(value = "/addTypeRemark.do",method = RequestMethod.POST)
    @ResponseBody
    public Map<String,String> addTypeRemark(String text,String typeid,@RequestParam(value = "remarkid", required = false)Integer remarkid,HttpServletRequest request){
        Map<String,String>  map = new HashMap<String,String> ();
        System.out.println(typeid);
        try {
            BatchType batchType=batchTypeMag.find(Integer.parseInt(typeid));
            TypeRemark typeRemark = new TypeRemark();
            if(remarkid!=null){
                typeRemark = typeRemarkMag.find(remarkid);
            }
            typeRemark.setBatchType(batchType);
            typeRemark.setText(text);
            typeRemarkMag.saveOrUpdate(typeRemark);
            map.put("status","success");
        } catch (Exception e) {
            e.printStackTrace();
            map.put("status","fail");
        }
        return map;
    }

也就是說,新增的時候,沒有這條記錄的id,修改的時候需要通過記錄的id修改,所以可以判斷一下。

這樣,easyui動態編輯行就完成啦

========================================================================================================

分割線
========================================================================================================
上次寫的這個行編輯還是有點問題的,就是沒有驗證,而且新增的時候沒有獲取到焦點。所以這裡修改一下:
1.editor型別改為textbox,因為text不支援easyui的驗證
columns:[[ 
                {field:'id',title:'編號',width:80,hidden:true},
                {field:'text',title:'內容',width:80,editor:{
                    type:'textbox',
                    options:{
                        required:true,
                        validType:'length[0,30]', 
                        invalidMessage:'不能超過30個字!'
                    }
                }}
            ]],

2.新增獲取焦點:

function addRemark(){
        if (editIndex != undefined){
            return ;
        }
        $('#remark_dg').datagrid('insertRow',{
            index: 0,   // 索引從0開始
            row: {
                text:''
            }
        });
        $('#remark_dg').datagrid('selectRow', 0);
        $('#remark_dg').datagrid('beginEdit', 0);
        var ed = $('#remark_dg').datagrid('getEditor', {index:0,field:'text'});
        $(ed.target).textbox('textbox').focus(); 
        editIndex = 0;
    }

3.新增撤銷操作:

function reject(){
            $('#remark_dg').datagrid('rejectChanges');
            editIndex = undefined;
    }
<a href="javascript:reject()" class="easyui-linkbutton" data-options="iconCls:'icon-undo',plain:true" >取消</a>

相關推薦

easyui編輯利用append row新增直接在行編輯ajax提交儲存

今天工作用到了easyui行編輯,在這裡總結一下,不會的同學可以看看,順便吐槽一下,網上的很多部落格都是貼上複製的,內容很亂 ,而且看不懂,不知道這些貼上複製的懷的是什麼心,不但沒用,還影響別人搜尋。 呼籲大家在寫部落格的時候認真一些,別隻貼上複製,至少可以自

C語言利用指標編寫程式,定義一個33列的二維陣列,並在程式對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值

題目來源:大工慕課 連結 作者:Caleb Sung 題目要求 利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值,各行

JavaWeb視訊網站開發利用Highcharts將網站日訪問量製作成線性表條形圖等

        線性表,條形圖,餅狀圖等圖形工具是我們的日常上網和工作中比較常見的圖形工具,它們主要是用來代替資料列表等傳統的資料處理方式,相比於其它的資料對比顯示形式,更能夠讓我們直觀明瞭的瞭解到事物的發展動態等等。     &nbs

Domain Adaptive Faster R-CNN經典域自適應目標檢測演算法解決現實痛點程式碼開源 | CVPR2018

> 論文從理論的角度出發,對目標檢測的域自適應問題進行了深入的研究,基於H-divergence的對抗訓練提出了DA Faster R-CNN,從圖片級和例項級兩種角度進行域對齊,並且加入一致性正則化來學習域不變的RPN。從實驗來看,論文的方法十分有效,這是一個很符合實際需求的研究,能解決現實中場景多樣

利用easyui實現對錶格的編輯增加和修改行

JSP頁面程式碼: <table id="dg" class="easyui-datagrid" title="Row Editing in DataGrid"style="width: 700px; height: auto"data-options="      

(原創)EasyUIdatagrid的編輯模式找到特定的Editor併為其新增事件

有時候在行編輯的時候,一個編輯框的值要根據其它編輯框的值進行變化,那麼可以通過在開啟編輯時,找到特定的Editor,為其新增事件 // 繫結事件, index為當前編輯行 var editors = $('#staffLogDetailGrid').datagrid('g

(原創)EasyUIdatagrid的編輯模式找到特定的Editor並為其添加事件

detail left order func cell options ble spa add 有時候在行編輯的時候,一個編輯框的值要根據其它編輯框的值進行變化,那麽可以通過在開啟編輯時,找到特定的Editor,為其添加事件 // 綁定事件, index為當前編輯行 v

實例表格的相關操作添加刪除編輯單元格

solid att align button 點擊 btn eat create lur html代碼: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti

python爬蟲實戰利用scrapy短短50代碼下載整站短視頻

start mongodb efi 本地 rtp 公司 loader 右鍵 more 近日,有朋友向我求助一件小事兒,他在一個短視頻app上看到一個好玩兒的段子,想下載下來,可死活找不到下載的方法。這忙我得幫,少不得就抓包分析了一下這個app,找到了視頻的下載鏈接,幫他解決

python爬蟲實戰利用scrapy短短50程式碼下載整站短視訊

近日,有朋友向我求助一件小事兒,他在一個短視訊app上看到一個好玩兒的段子,想下載下來,可死活找不到下載的方法。這忙我得幫,少不得就抓包分析了一下這個app,找到了視訊的下載連結,幫他解決了這個小問題。 因為這個事兒,勾起了我另一個念頭,這不最近一直想把python爬蟲方面的知識梳理梳理嗎,乾脆藉機行事,正湊

C#DataGridView控制元件的使用。繪製號。新增右鍵選單

1.簡單使用 using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsFormsApp17 { public partial class Form1 : F

筆記利用 runtime 交換方法、給分類動態新增屬性

第一次寫部落格,有些小緊張,如有不對的地方還請大牛們及時指出,在此先感謝各位大牛了... 一、利用 runtime 交換方法: 1、交換方法的實現 #import "UIImage+mImage.h" @implementation UIImage (mImage) +(void)l

百度編輯器UEEDITOR使用簡單介紹 UEditor表單提交和後臺互動詳解 最後更新對應的版本1.2.5.1 教程描述 富文字編輯器的使用開發表單提交有多種場景編輯器初始化有新增文章和編輯

UEditor表單提交和後臺互動詳解最後更新對應的版本:1.2.5.1 教程描述: 富文字編輯器的使用開發中,表單提交有多種場景,編輯器初始化有新增文章和編輯就文章兩種場景,提交表單有普通提交也有ajax提交表單兩種情景,此教程詳細講解這幾種場景下如何保證後臺正確拿到資料。 一、編輯器內容初始化(即往編

ASP.NET Aries 入門開發教程6列表資料表格的格式化處理及編輯

前言: 為了趕進度,週末也寫文了! 前幾篇講完查詢框和工具欄,這節講表格資料相關的操作。 先看一下列表: 接下來我們有很多事情可以做。 1:格式化 - 鍵值的翻譯 對於“啟用”列,已經配置了格式化 #是否,已經可以看到效果了。 對於分類ID列,通常顯示的是分類名稱,而不是

PandasDataFrame數據的更改、插入新增的列和

core 參數 tro 語法 columns ont 對象 需要 mage 一、更改DataFrame的某些值 1、更改DataFrame中的數據,原理是將這部分數據提取出來,重新賦值為新的數據。 2、需要註意的是,數據更改直接針對DataFrame原數據更改,操作無法

Android自定義控制元件系列 十利用新增自定義佈局來搞定觸控事件的分發解決組合介面特定控制元件響應特定方向的事件

        這個例子是比較有用的,基本上可以說,寫完這一次,以後很多情況下,直接拿過來addView一下,然後再addInterceptorView一下,就可以輕輕鬆鬆的達到組合介面中特定控制元件來響應特定方向的觸控事件了。         在寫Android應用

Unity編輯器拓展之六利用反射開啟Unity Preferences Window

如何利用反射開啟Unity Preferences Window Unity Preferences Window如下圖所示: 作為Unity 的引數設定視窗,這個視窗支援新增項,當然本文不介紹這個內容,本次介紹如何利用反射、以及Unity Editor

JavaScript利用append新增元素報錯

1、錯誤描述 在IE瀏覽器上: Uncaught HierarchyRequestError:Failed to excute 'appendChild' on 'Node':The new chil

緩沖區溢出實戰教程系列(三)利用OllyDbg了解程序運機制

成了 代碼段 下界 urn 方便 htm oca 相差 14. 想要進行緩沖區溢出的分析與利用,當然就要懂得程序運行的機制。今天我們就用動態分析神器ollydbg來了解一下在windows下程序是如何運行的。 戳這裏看之前發布的文章: 緩沖區溢出實戰教程系列(一):

antd table 新增編輯刪除

目標 新增行:點選新增行,當有行在編輯並未進行儲存時提示先儲存;表格行中未有未儲存的內容時,表格最後加一行,並可以輸入內容,當點