Easyui datagrid combobox輸入框下拉(取消)選值和編輯已選值處理

来源:https://www.cnblogs.com/shouke/archive/2019/03/30/10629652.html
-Advertisement-
Play Games

datagrid combobox輸入框下拉(取消)選值和編輯已選值處理 by:授客 QQ:1033553122 測試環境 jquery-easyui-1.5.3 需求場景 如下,在datagrid中新增、編輯記錄: 新增時通過點選指定combobox下拉列表項來實現選擇、取消選擇所點項(多選com ...


datagrid combobox輸入框下拉(取消)選值和編輯已選值處理

by:授客 QQ:1033553122

 

測試環境

jquery-easyui-1.5.3

 

需求場景

如下,在datagrid中新增、編輯記錄:

新增時通過點選指定combobox下拉列表項來實現選擇、取消選擇所點項(多選combobx:如果輸入框中沒有該選項,則選中該項,並自動顯示在combobox輸入框中,否則取消選中該項,並自動去除combobox中對應的項;)

編輯時,點擊下拉三角,打開下拉列表,列表中自動選中同輸入框中的值對應的列表項;另外,輸入框支持手動輸入,如果手動輸入的值不在下拉列表中,則收起下拉框時,自動去除不在下拉列表項中的值

 

 

 

 

實現思路和解決方案

這裡新增時利用combobox自帶的特性就可以滿足需求,問題在於編輯時,怎麼讓combobox自動識別輸入框中的值,即自動讓輸入框中的已選值和下拉列表項關聯。(記錄剛進入編輯時,這裡的已有值是純文本,和下拉列表是沒有關聯的。)

 

出解決方案之前得先認識下combobox特性

1)如果combobox輸入框當前valueField屬性和 textField屬性值可以在下拉列表即通過loadData獲取的選項中找到匹配,則才會產生關聯。

2)調用setText設置textField屬性值,然後調用setValue設置valueField屬性值時,最後執行combobox 的loadData方法時(如果combobox還沒有載入數據的情況下),就等同於未選中選項的情況下,手動點選下拉列表項,會自動觸發onSelect事件

3)多選combobox,如果點選下拉列表項,如果點擊之前選項已選中,則會取消選中該選項,並去掉combobox中對應項,自動觸發onSelect事件,onSelect事件處理函數攜帶一個參數,接收被點擊項目相關信息(包括text和value信息),同時這會自動觸發onUnSelect事件,onUnselect事件處理函數攜帶一個參數,用於接收被點擊項相關信息(包括text和value信息)

如果點擊之前選項未選中,則選中該選項,自動觸發onSelect事件,並自動在combobx輸入框中輸入被選項

4)單選combobox(設置combobox為不可編輯,只可點選的情況下做的驗證)

如果點擊之前選項未選中,則選中該選項,自動觸發onSelect事件,onSelect事件處理函數攜帶一個參數,接收被點擊項目相關信息(包括text和value信息),並自動在combobx輸入框中輸入被選項,否則不會觸發該事件函數。

5)隱藏、收起combobox下拉列表框時,會自動觸發onHidePannel事件,該事件處理函數不攜帶參數

 

解決方案:

1)設置所屬項目combobox多選,可編輯,為其添加onSelect,onUnSelect,OnHidePannel事件處理函數

設置全局變數project_id_list 初始化值為 [],執行onSelect事件函數時,判斷點選項的value值是否存在project_id_list中,如果存在則移除,否則添加到project_id_list中,當執行onUnSelect事件函數時,判斷點選項的value值是否在project_id_list中,如果已存在,則移除,執行OnHidePannel事件函數時,設置combobox的value值為project_id_list;

提交保存記錄請求前,轉project_id_list為字元串,提交後存儲到mysql資料庫,獲取記錄時,返回該值

初始化編輯時,獲取所屬項目combobox當前text對應的value,轉為list形式後(setValue參數類型要求如此),並調用setValue函數為combobox賦值,然後調用loadData函數載入數據,讓已選項和下拉列表關聯

 

2)設置所屬環境combobox單選,不可編輯,為其添加onSelect事件處理函數

設置全局變數envronment_id 初始化值為null,執行onSelect事件函數時,保存點選項給 獲取所屬環境對應的value值為envronment_id

請求保存記錄後存儲到mysql資料庫,獲取記錄時,返回該值

 

初始化編輯時,獲取所屬環境combobox當前text對應的value,調用setValue函數為combobox賦值,然後調用loadData函數載入數據,讓已選項和下拉列表關聯

 

 

代碼實現(片段)

 

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    ……略

    <script>

 

     ……略

        var environment = undefined;  // 所屬環境

        var environment_id = null; // 記錄所屬環境id

        var project_id_list = [];      // 所屬項目id list

        var order = undefined; // 順序

 

        ……略

 

        // 點擊 保存 按鈕的函數實現

        function saveRow(){

                ……略

                project_id_list = project_id_list.toString();

                if (ifInsert == true) { // 新增

                    var url = '/action/addDatabaseSetting';

                    var params = {

                        ……略

                        environment:environment,

                        environment_id:environment_id,

                        ……略

                        project_name:project_name,

                        project_id:project_id_list,

                        ……略

                    };

                } else if (ifInsert == false) { // 修改

                    var url = '/action/editDatabaseSetting';

                    var params = {

                        ……略

                        environment:environment,

                        environment_id:environment_id,

                        ……略

                        project_name:project_name,

                        project_id:project_id_list

                    };

                }

 

                $.post(url, params, function(data,status){

                            if (data == 'success') {

                                $.messager.alert('提示','保存成功', 'info');

                            } else {

                                $.messager.alert('錯誤', '保存失敗: ' + data, 'error');

                            }

                            $('#Database_setting').datagrid('reload');

                        }

                );

            } else {

                $.messager.alert('告警', '保存失敗,請檢查是否設置必填(必選)項', 'error');

                $('#Database_setting').datagrid('reload');

            }

 

            ……略

            project_id_list = [];

            ……略

        }

 

        // 點擊 取消 按鈕的函數實現

        function cancelEditRow() {

            ……略

            project_id_list = [];

            ……略

        }

 

        // 點擊表格 修改 按鈕的函數實現

        function editRow(rowID, index){

               ……略

                var projectType = rowsSelected[0].project_type;

                var projectIDList = rowsSelected[0].project_id.split(',');

                var envIDList = rowsSelected[0].environment_id.toString().split(',');

 

 

                // 初始化行組件的值

                initDataForRowComponets(projectType, '修改', projectIDList, envIDList);

                ifInsert = false;

            }

        }

 

 

        // 初始化行記錄組件值

        function initDataForRowComponets(projectType, opType, projectIDList, envIDList) {

            var environmentEditor =  $('#Database_setting').datagrid('getEditor', {index: editIndex, field: 'environment'});

            var projectEditor =  $('#Database_setting').datagrid('getEditor', {index: editIndex, field: 'project_name'});

 

            if (opType == '新增') {

                 ……略

            } else if (opType == '修改') {

                // 做這一步是為了讓項目名稱、環境名稱已選文本值和下拉列表中的選項關聯

                $(projectEditor.target).combobox('setValues', projectIDList);

                $(environmentEditor.target).combobox('setValues', envIDList);

 

                // 請求所屬環境下拉列表數據

                $.get('/action/getEnvs', function(data,status) {

                    var jsonData = JSON.parse(data);

                    if (jsonData['result'] == 'success') {

                        $(environmentEditor.target).combobox('loadData', jsonData['data']);

 

                    } else {

                        $.messager.alert('錯誤信息', '獲取可用環境列表出錯: ' + jsonData['data'], 'error');

                    }

                });

 

            }

            ……略

 

        }

 

 

        // 下拉點選所屬項目列表選項時觸發的事件

        function onSelectForProjectCombobox(row) {

            var index = project_id_list.indexOf(row.id2);

 

            // 如果不存在,則添加記錄id屬性值到數組,否則移除數組

            if(index != -1) {

                project_id_list.splice(index, 1);

            } else {

                project_id_list.push(row.id2);

            }

        }

 

        //取消所屬項目列表項時觸發事件

        function onUnselectForProjectCombobox(row) {

            var index = project_id_list.indexOf(row.id2.toString());

            if(index != -1) { // 如果被取消項的id值存在數組中,則移除對應id

                project_id_list.splice(index, 1);

            }

        }

 

        // 收起 所屬項目 下拉列表框時觸發的事件

        function onHidePanelForProjectCombobox(row){

            // 設置commbox輸入框的文本值

            var projectNameEditor = $('#Database_setting').datagrid('getEditor', {index: editIndex, field:'project_name'});

            $(projectNameEditor.target).combobox('setValue', project_id_list);

        }

 

 

        //選擇所屬環境下拉列表項時觸發事件

        function onSelectForEnvCombobox(row) {

            environment_id = row.id

        }

 

    </script>

</head>

<body>

<table class="easyui-datagrid" rownumbers="true" pagination="true"    ……略>

    <thead>

    <tr>

       ……略

        <th data-options="field:'project_name', align: 'left', editor:{

                        type:'combobox',

                        options:{

                            valueField:'id2',

                            textField:'choice',

                            required:true,

                            editable:true,

                            multiple:true,

                            panelHeight:'auto',

                            onSelect: onSelectForProjectCombobox,

                            onUnselect:onUnselectForProjectCombobox,

                            onHidePanel:onHidePanelForProjectCombobox,

                        }}" width="400px">所屬項目</th>

        <th data-options="field:'environment', align: 'center', editor:{

                        type:'combobox',

                        options:{

                            valueField:'id',

                            textField:'choice',

                            required:true,

                            editable:false,

                            panelHeight:'auto',

                            onSelect:onSelectForEnvCombobox

                        }}" width="130px">所屬環境</th>

                        ……略

    </tr>

    </thead>

</table>

 

……略

</body>

</html>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 超鏈接邊框 2. 派生超鏈接 3. 屬性選擇器超鏈接 4. 動態超鏈接 5. 圖像翻轉超鏈接 6. CSS 工具提示 1.給鏈接加上邊框 A:link { Color: #f00; Text-decoration: none; Border-bottom: 1px dashed #333; L ...
  • 1. div 2. 邊距 3. 邊框 4. 定位 5. 浮動 1 21.1 div 部分(division) <div>元素,經常以 div 形式引用 是 XHTML 元素,用於定義 XHTML 文 件中的區域. 1.添加 div <div> <p>This is our content area. ...
  • 1.Filter 屬性介紹 2.Alpha 濾鏡的使用 3.Blur 濾鏡的使用 4.Filph、Filpv 濾鏡 5.DropShadow 濾鏡 6.Glow 濾鏡 7.Gray ,Invert,Xray 濾鏡 8.Shadow 濾鏡 1 19.1 F Fr ilter 屬性介紹 設置或檢索對象所 ...
  • dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib Referenced from: /usr/local/lib/liblept.5.dylib Reason: image not found'使用pytesserac... ...
  • 有一道很有意思的數組操作相關編程題,閑來無事用JS解決了一下,問題描述如下: (1) 鍵盤錄入6個int類型的數據存入數組arr中; (2) 將arr數組中的內容反轉; (3) 將反轉後的數組角標為奇數的元素相互交換,即1和3交換,3和5交換,以此類推; (4) 將數組中最後一個角標為奇數的元素和數 ...
  • 1. HTML認識 1.1 什麼是HTML HTML是描述(製作)網頁的語言,指的是超文本標記語言(Hyper Text Markup Language)。 超文本:就是指頁面內可以包含圖片、鏈接、甚至音樂、程式等非文字元素; 標記語言:是一套標記標簽(markup tag); 標記:一種標記符、標 ...
  • 一、準備階段: a.進入阿裡巴巴矢量圖標庫www.iconfont.cn挑選所需的圖標,加入購物車 b.點擊網頁中的購物車下載代碼 二、3種方法實現 Iconfont 的HTML顯示 Unicode 引用 Unicode 是字體在網頁端最原始的應用方式,特點是: 相容性最好,支持 IE6+,及所有現 ...
  • 一、現象描述 真正意義上的inline-block水平呈現的元素間,換行顯示或者空格隔開的情況下會有間距,這是因為瀏覽器在解析時,會將換行等讀取成一個空格導致。 二、移出空格的方法 ① 我們可以去掉元素之間的換行和空格,這樣間距自然就沒有了,但是這樣會降低代碼的可讀性,不可取。 ② 使用margin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...