[Ext JS 4] 實戰之多選下拉單 (帶checkbox)
前言
Ext js 建立一個多選下拉單的方式很簡單, 使用Ext.form.ComboBox, 設定 multiSelect 為true 就可以了。
但是如果要在每個下拉之前加上一個checkbox, 如何實現呢?
ComboBox本身沒有這樣的配置,
有一個 “Ext.ux.form.MultiSelect” 這樣一個擴充套件, 效果的話,是把選項全部顯示出來。
沒辦法只能自己擴充套件一個這樣的元件了。
介面實現
要實現這樣的顯示,可以使用ComboBox 的listConfig 這個配置。
可以配置listConfig的itemTpl來顯示每個選項的顯示效果,
itemTpl : Ext.create('Ext.XTemplate', '<input type=checkbox>{value}'),
功能聯動
顯示效果出來了並沒有介紹,
在選中某個選項時, 其前面的checkbox 應該是選中狀態;
反選某個,其前面的checkbox 應該是非選中狀態。
解決方式是在listConfig下配置 itemclick 的listeners
listeners:{ itemclick:function(view, record, item, index, e, eOpts ){ var isSelected = view.isSelected(item); var checkboxs = item.getElementsByTagName("input"); if(checkboxs!=null) { var checkbox = checkboxs[0]; if(!isSelected) { checkbox.checked = true; }else{ checkbox.checked = false; } } } }
動態store
以上方式在本地store 的狀態下是可以的。
var states2 = Ext.create('Ext.data.Store', {
fields: ['abbr', 'name'],
data : [
{"abbr":"AL", "name":"Alabama"},
{"abbr":"AK", "name":"Alaska"},
{"abbr":"AZ", "name":"Arizona"}
//...
]
});
但是通過ajax 方式取store 資料的狀況就會出現一個問題。
proxy: { type: 'ajax', url: '/users.json', reader: { type: 'json', root: 'users' } },
選中之後, 下一次點選下拉單的話, 之前選中的check box 會被取消選擇。
原因是這種方式會更新 combobox 的下拉選項(combobox), 試圖通過在refresh , render 事件中加入處理, 發現不行。
最終追蹤程式碼,可以通過覆蓋onItemSelect的方法實現。Ext.define('Ext.ux.MultiComboBox', {
extend: 'Ext.form.ComboBox',
alias: 'widget.multicombobox',
xtype: 'multicombobox',
initComponent: function(){
this.multiSelect = true;
this.listConfig = {
itemTpl : Ext.create('Ext.XTemplate',
'<input type=checkbox>{value}'),
onItemSelect: function(record) {
var node = this.getNode(record);
if (node) {
Ext.fly(node).addCls(this.selectedItemCls);
var checkboxs = node.getElementsByTagName("input");
if(checkboxs!=null)
{
var checkbox = checkboxs[0];
checkbox.checked = true;
}
}
},
listeners:{
itemclick:function(view, record, item, index, e, eOpts ){
var isSelected = view.isSelected(item);
var checkboxs = item.getElementsByTagName("input");
if(checkboxs!=null)
{
var checkbox = checkboxs[0];
if(!isSelected)
{
checkbox.checked = true;
}else{
checkbox.checked = false;
}
}
}
}
}
this.callParent();
}
});
相關推薦
[Ext JS 4] 實戰之多選下拉單 (帶checkbox)
前言 Ext js 建立一個多選下拉單的方式很簡單, 使用Ext.form.ComboBox, 設定 multiSelect 為true 就可以了。 但是如果要在每個下拉之前加上一個checkbox, 如何實現呢? ComboBox本身沒有這樣的配置, 有一個 “E
[Ext JS 4] 實戰之Grid, Tree Gird編輯Cell
前言本篇這裡以稍微複雜一點的Tree Grid 來介紹.在寫編輯grid 之, 先來看一下 grid 的 selType 的配置。先給一個簡單的Tree grid 的例子:Ext.onReady(function(){ var treeStore = Ext.create(
[Ext JS 4] 實戰之 帶week(星期)的日期選擇控制元件
前言Ext JS 3 和 Ext JS 4中都有提供日期選擇的元件(當然早期版本也有)。但是有一些日期選擇的需求是要看到星期,就是日期中的哪一天是這一年的第幾周。遺憾的是Ext js 並沒有提供這樣的配置。(針對Ext js 4來說,理想的相法是在Ext.picker.Dat
jq自定義多選下拉列表框
多選 img 插件 國家 http 分享 class 下拉 blog 多選選擇國家插件 https://gitee.com/richard1015/dropDownList jq自定義多選下拉列表框
基於element-ui的多選下拉框和tag標簽的二次封裝
line ron click opacity ext width 顯示 模塊 scss 前言: 今年這大半年我主要負責公司的後臺教務管理的開發,這個管理系統目前主要是給公司的內部人員去配置公司的核心項目(例如:熊貓小課)的所有數據,例如課程的配置、課程期數的配置、課程版本
jqgrid 表格中篩選條件的多選下拉,樹形下拉 ;文本框清除插件;高級查詢多條件動態篩選插件
this break eset real 分割線 EDA color ctx 篩選條件 /** * @@desc 文本框清除按鈕,如果isAutoWrap為false當前文本框父級必須是relative定位,boostrap參考input-group
bootstrap-select動態級聯多選下拉框
1、引用css/js <link href="../../plugins/css/bootstrap.min.css" rel="stylesheet"> <link href="../../plugins/css/plugins/bootstrap-table/bootstr
PHP獲取單選下拉列表,多選下拉列表,單選框,複選框內的值
PHP獲取單選下拉列表,多選下拉列表,單選框,複選框內的值,此例將當前頁作為提交資料的頁面。 <form action=" " method="post" accept-charset="utf-8"> <!--單選下拉 學歷--> <selec
select2多選下拉功能
AngularJS完成select2多選下拉功能 1、引入js及css資源 2、頁面新增select標籤 1、引入js及css資源 <script src="../plugins/angularjs/angul
可搜尋多選下拉列表外掛
可搜尋多選下拉列表外掛 參考:http://blog.csdn.net/xb12369/article/details/50999265 <html> <head> <title>jQuery bootstrap-sele
Bootstrap-select多選下拉框實現
<!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/css/bootst
獲取多選下拉框(select標籤設定multiple屬性)的值
<select multiple>不能直接獲取value,需要藉助該元素的options屬性。如下: <select id="select" multiple> <option value="1">1111</option> &
EasyUI多選下拉框的取值和賦值
@RequestMapping("/getCodeList") public void getCodeList(HttpServletResponse resp){ ResUtil.res
多選下拉控制元件multiselect使用小結
專案開發中,需要用到多選下拉列表外掛,由於專案前端框架採用了bootstrap,因此自然選擇了bootstrap的元件。經瞭解其有兩組外掛: 1、第一個元件是寫bootstrap table的主人公 wenzhixin 封裝的一個元件—— 筆者參考了“
Bootstrap select多選下拉框賦值
Bootstrap Multi-Select Plugin的動態資料插入使用 圖片: 這個你看到的是我頁面的效果,我將裡面的js程式碼修改了一點,擴充套件了一下顯示的結果id,text,這是固定的,後面的是我又加了一個引數 參考頁面:多選框外掛連結(這個就是那個多選的
Extjs多選下拉框multiSelect支援reset
多選,增加時會記憶上一次的選中的內容,表單reset對其無效,通過此修改可使表單reset時也會跟著清空。 以下程式碼是在multiSelect.js的基礎上進行簡單修改的。 if('function' !== typeof RegExp.escape) { RegExp.
bootstrap做前端需要實現多選下拉框
首先需要用到一個外掛bootstrap-select.min.js,新增以下引用:bootstrap-select.cssbootstrap-select.min.cssjquery-editable-select.css.cssbootstrap-select.jsboot
EasyUI 中多選下拉框 combotree 學習研究
增加可以獲取的兩個選擇屬性: //alert($("#cc").combotree("getValue")); //獲取key var wordstr= $("#aa").combotree("getValues"); //獲取多選的key alert($("#cc").combotree("get
POI 多選下拉選單(複選框) 匯出Excel模板 下拉選單單選,下拉選單多選
最近公司要做Excel的模板匯出,匯入資料的工作,匯出時還要動態生成模板,並且生成單選下拉選單,和多選下拉選單。開始搞這個很快除了多選的都搞定了,就是多選卡住了。弄了很久。。。最後終於在和多方面的交流下成功弄出。之前在網上找不到方法很是頭疼,現在弄出來分享一下給大家。。歡迎指
layui多選下拉使用筆記
bug、新增內容、修改內容 擴充套件 增加屬性xm-select-dd-title 設定當滑鼠劃過時顯示提示框格式。預設不顯示,值為“tip”時使用layui自帶的tips顯示,其它按照title屬性顯示。詳見程式碼。 增加屬性xm