日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jqgrid表格下拉搜索多选框优化—使用select下拉多选插件

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jqgrid表格下拉搜索多选框优化—使用select下拉多选插件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jqgrid表格插件應該是表格插件中最強大吧,最近項目需要使用jqgrid但又要根據項目需求進行一些私人訂制,還好jqgrid的源碼寫清晰易懂。

jqgrid有個下拉搜索的功能,我們先看下官網的展示,網址:http://www.guriddo.net/demo/bootstrap/。


下拉單選搜索樣式還過得去可以將就,使用的html5原生的select。

先簡單說下這個下拉搜索的API吧

colModel參數中 要進行下拉搜索的列 添加 style:"select" ,如果下拉的選項是 預先知道 就添加?searchoptions選項,如果為多選下拉搜索 再添加?multiple:true

例如

{name:'operateType',label:'操作類型',align:"center",width: 100, frozen: true,
? ? ? ? ? ? stype: "select",

? ? ? ? ? ? ?? multiple:true,?
? ? ? ? ? ? ? ? ? ? searchoptions: { multiple:true, value: ":[All];ALFKI:ALFKI;ALFKI:ALFKI;ANATR:ANATR;ANTON:ANTON;AROUT:AROUT" }

}

如果你的下拉選項要從后臺獲取,需要配置dataUrl選項 返回的是 select的html字符串代碼。

順便插一句,如果選項中有中文,要注意編碼,由于項目中用的spring mvc ,就在 controller方法上添加@RequestMapping(value = "getColDownSelect", produces = "text/html;charset=utf-8") 添加produces 編碼就可以啦。


單選的效果


多選的效果


知道原生的多選是怎么操作的嗎?安裝Ctrl鍵 然后 點擊不同的選項就可以選擇多個。我們程序員當然會啦,如果你讓客戶這么去操作保證絕對不打死你,這么復雜的操作,所以有很多多選下拉框的js插件就應運而生了。用的比較多的jquery.multiSelect.js 、bootstrap-multiselect.js、multiple-select.js等等。

下面進入重點了,本人上面3插件都去試過,發現無一例外 展示選項的 元素無法顯示,3種都不展示!!!那就應該是jqgrid的結構樣式對下選項影響了。

下面我使用mutiple-select.js來做下拉多選。看下圖,單擊下拉選項 相應的div 存在于 html結構當中 只是被遮住,另外2種插件也是同樣的情況。

?

起初以為與z-index有關,然后改變z-index 并沒有什么卵用。然后就去惡補css 相關知識也咨詢了前端的同事 ,說有可能是 父元素 設置overflow:hidden影響的。后面發現果然是overflow影響的 搜索框向上的4個祖先元素有overflow:hidden,將其改成visible就可以展示了。


但是樣式也 賊亂了吧,調整下樣式吧,最后看下效果,這樣是不是 整潔很多了吧。


下面貼下代碼,代碼很簡單,核心就是在 jqgrid拼接 select html 完之后使用 select 多選插件,然后在調整樣式。

這里說下,本人jqgrid使用的??Guriddo jqGrid JS - v5.1.1 - 2016-06-08 這個版本 ,就是上面官網那個。

在源碼$($t).triggerHandler("jqGridAddEditAfterSelectUrlComplete", [elem]);這行下面添加

$(elem).css("padding","0 0");//為多選的時候if($(elem).attr("multiple")){$(elem).multipleSelect({selectAllText:"全選",selectAllDelimiter:["",""]});//內容展示不了修改$(elem).next().css("overflow","visible").parents("div:eq(0)").css("overflow","visible").parents("th:eq(0)").css("overflow","visible").parents(".ui-jqgrid-hdiv").css("overflow","visible");//樣式調整$(elem).next().css({"padding":"0 0","height":"24px","border":"0"}).children("button").css({"margin-left":"0px","height":"24px"}).children("div").css({"position":"absolute"});$(elem).next().children(".ms-drop").css("position","absolute");}
在第二處的setAttributes(elem, options, ['value']); 后面添加?

setTimeout(function(){$(elem).css("padding","0 0");//多選的時候if($(elem).attr("multiple")){$(elem).multipleSelect({selectAllText:"全選",selectAllDelimiter:["",""]});//內容展示不了$(elem).next().css("overflow","visible").parents("div:eq(0)").css("overflow","visible").parents("th:eq(0)").css("overflow","visible").parents(".ui-jqgrid-hdiv").css("overflow","visible");//樣式兼容$(elem).next().css({"padding":"0 0","height":"24px","border":"0"}).children("button").css({"margin-left":"0px","height":"24px"}).children("div").css({"position":"absolute"});$(elem).next().children(".ms-drop").css("position","absolute");}},5);
這里加setTimeout是如果使用dataUrl時,先將select渲染完了然后再使用下拉多選插件。

使用其他下拉插件也一樣,根據展示的下拉選項 將其 祖先元素 的overflow 改成visible可見 然后 下拉選項又是絕對定位 會飄出文檔流就展示到表格上方了,然后就是具體情況具體調整樣式了。

好了,收工。



總結

以上是生活随笔為你收集整理的jqgrid表格下拉搜索多选框优化—使用select下拉多选插件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。