`
chenxueyong
  • 浏览: 342245 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Ext多选下拉框

阅读更多
Ext多选下拉框
2009-02-11 13:19

 

 

一.首先引入对象Ext.form.MultiSelect

// vim: ts=4:sw=4:nu:fdc=4:nospell

 

// add RegExp.escape if it has not been already added
if('function' !== typeof RegExp.escape) {
RegExp.escape = function(s) {
if('string' !== typeof s) {
return s;
}
// Note: if pasting from forum, precede ]/\ with backslash manually
return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
}; // eo function escape
}

// create namespace
Ext.ns('Ext.form');


Ext.form.MultiSelect = Ext.extend(Ext.form.ComboBox, {

// {{{
// configuration options

checkField:'checked'


,separator:','


// }}}
// {{{
,initComponent:function() {

// template with checkbox
if(!this.tpl) {
this.tpl =
'<tpl for=".">'
+'<div class="x-combo-list-item">'
+'<img src="' + Ext.BLANK_IMAGE_URL + '" '
+'class="ux-MultiSelect-icon ux-MultiSelect-icon-'
+'{[values.' + this.checkField + '?"checked":"unchecked"' + ']}">'
+'{[values.'+this.displayField+']}'
+'</div>'
+'</tpl>'
;
}

// call parent
Ext.form.MultiSelect.superclass.initComponent.apply(this, arguments);

// install internal event handlers
this.on({
scope:this
,beforequery:this.onBeforeQuery
,blur:this.onRealBlur
});

// remove selection from input field
this.onLoad = this.onLoad.createSequence(function() {
if(this.el) {
var v = this.el.dom.value;
this.el.dom.value = '';
this.el.dom.value = v;
}
});

} // e/o function initComponent
// }}}
// {{{

,initEvents:function() {
Ext.form.MultiSelect.superclass.initEvents.apply(this, arguments);

// disable default tab handling - does no good
this.keyNav.tab = false;

} // eo function initEvents
// }}}
// {{{

,clearValue:function() {
this.value = '';
this.setRawValue(this.value);
this.store.clearFilter();
this.store.each(function(r) {
r.set(this.checkField, false);
}, this);
if(this.hiddenField) {
this.hiddenField.value = '';
}
this.applyEmptyText();
} // eo function clearValue
// }}}
// {{{

,getCheckedDisplay:function() {
var re = new RegExp(this.separator, "g");
return this.getCheckedValue(this.displayField).replace(re, this.separator + ' ');
} // eo function getCheckedDisplay
// }}}
// {{{

,getCheckedValue:function(field) {
field = field || this.valueField;
var c = [];

// store may be filtered so get all records
var snapshot = this.store.snapshot || this.store.data;

snapshot.each(function(r) {
if(r.get(this.checkField)) {
c.push(r.get(field));
}
}, this);

return c.join(this.separator);
} // eo function getCheckedValue
// }}}
// {{{

,onBeforeQuery:function(qe) {
qe.query = qe.query.replace(new RegExp(RegExp.escape(this.getCheckedDisplay()) + '[ ' + this.separator + ']*'), '');
} // eo function onBeforeQuery
// }}}
// {{{

,onRealBlur:function() {
this.list.hide();
var rv = this.getRawValue();
var rva = rv.split(new RegExp(RegExp.escape(this.separator) + ' *'));
var va = [];
var snapshot = this.store.snapshot || this.store.data;

// iterate through raw values and records and check/uncheck items
Ext.each(rva, function(v) {
snapshot.each(function(r) {
if(v === r.get(this.displayField)) {
va.push(r.get(this.valueField));
}
}, this);
}, this);
this.setValue(va.join(this.separator));
this.store.clearFilter();
} // eo function onRealBlur
// }}}
// {{{

,onSelect:function(record, index) {
if(this.fireEvent('beforeselect', this, record, index) !== false){

// toggle checked field
record.set(this.checkField, !record.get(this.checkField));

// display full list
if(this.store.isFiltered()) {
this.doQuery(this.allQuery);
}

// set (update) value and fire event
this.setValue(this.getCheckedValue());
this.fireEvent('select', this, record, index);
}
} // eo function onSelect
// }}}
// {{{

,setValue:function(v) {
if(v) {
v = '' + v;
if(this.valueField) {
this.store.clearFilter();
this.store.each(function(r) {
var checked = !(!v.match(
'(^|' + this.separator + ')' + RegExp.escape(r.get(this.valueField))
+'(' + this.separator + '|$)'))
;

r.set(this.checkField, checked);
}, this);
this.value = this.getCheckedValue();
this.setRawValue(this.getCheckedDisplay());
if(this.hiddenField) {
this.hiddenField.value = this.value;
}
}
else {
this.value = v;
this.setRawValue(v);
if(this.hiddenField) {
this.hiddenField.value = v;
}
}
if(this.el) {
this.el.removeClass(this.emptyClass);
}
}
else {
//this.clearValue();
}
} // eo function setValue
// }}}
// {{{

,selectAll:function() {
this.store.each(function(record){
// toggle checked field
record.set(this.checkField, true);
}, this);

//display full list
this.doQuery(this.allQuery);
this.setValue(this.getCheckedValue());
} // eo full selectAll
// }}}
// {{{

,deselectAll:function() {
this.clearValue();
} // eo full deselectAll
// }}}

}); // eo extend

// register xtype
Ext.reg('multiSelect', Ext.form.MultiSelect);

二.多选下拉框实现

//任务状态JsonStore
var taskstatusStore = new Ext.data.JsonStore({
id:'optvalue',
remoteSort: false,
fields: [
'optvalue',
'opttext'
],
proxy: new Ext.data.HttpProxy({
url: 'operation/task/querytaskstatuslist.jsp'
})
});
//给下拉框设置默认值
taskstatusStore.load();
taskstatusStore.on('load',function(){
taskstatuscombo.setValue(3);
});
var taskstatuscombo = new Ext.form.MultiSelect({
width:130,
editable: false,
store:taskstatusStore ,
valueField :"optvalue",
displayField: "opttext",
mode: 'local',
//forceSelection: true,一定不要声明此句
triggerAction: 'all',
allowBlank:false,
emptyText:'请选择'
});

  • 大小: 34.9 KB
分享到:
评论

相关推荐

    EXT3.2 多选下拉框

    EXT3.2 多选下拉框是一种在EXT JS框架中实现的用户界面组件,它允许用户在下拉菜单中选择多个选项。EXT JS是一个基于JavaScript的富客户端应用开发框架,用于构建桌面级的Web应用。EXT3.2是EXT JS的一个版本,尽管...

    ext多选下拉框(代码及例子)

    在"ext多选下拉框(代码及例子)"这个主题中,主要涉及到的知识点有: 1. **EXTJS的Combo组件**:Combo是EXTJS中的一种表单组件,它提供了下拉列表的功能,可以用于输入或者选择数据。它既可以作为单选也可以作为...

    ext-----多选下拉框

    在EXT框架中,"多选下拉框"是一种常见的组件,它允许用户在下拉列表中选择多个选项,而不是仅限于单选。 在EXT中实现多选下拉框,主要涉及到EXT的`ComboBox`组件和`multiSelect`配置项。`ComboBox`是一个灵活的输入...

    extjs多选 下拉框扩展

    ExtJS 是一个强大的JavaScript应用程序框架,用于构建交互式的Web...这个扩展可能包括了新的配置项、模板修改、事件处理、数据模型、方法以及行为调整等多个方面,使得在ExtJS应用中实现多选下拉框变得更加简单和便捷。

    Extjs3.4.0版本 多选下拉框效果支持多选/全选/全不选

    在ExtJS 3.4.0版本中,多选下拉框(Multiselect Combobox)是一种常见的用户界面组件,用于提供多个选项供用户选择。这个功能增强了标准的单选下拉框,允许用户同时选择多个条目,通常通过复选框实现。在描述中提到...

    extjs多选下拉框

    在EXTJS框架中,"多选下拉框"(Multi-Select ComboBox)是一种常见的组件,它允许用户在下拉列表中选择多个选项。EXTJS 3.*版本也提供了这种功能,使得开发者能够创建功能丰富的界面,提升用户体验。下面将详细解释...

    基于ext3.3的可多选下拉框js

    基于ext3.3的可多选下拉框js,可以从前台或者后台获取下拉框中数据

    combobox Ext之扩展组件多选下拉框

    本篇将重点讲解ExtJS中的一个扩展组件——多选下拉框,即“combobox”。 在ExtJS中,ComboBox是一个基本的输入组件,它结合了文本输入框和下拉列表的功能。默认情况下,ComboBox只允许用户选择一个选项。但是,通过...

    Extjs3 多选下拉框LovCombo

    在ExtJS 3中,多选下拉框(LovCombo)是一种复合组件,它结合了下拉列表和“爱好者选择”(LOV,Lookup Value)的功能,允许用户在多个选项中进行复选选择。在Web应用中,这种组件常用于数据输入,特别是在数据库...

    ext4实现带复选框的多选下拉框

    标题提到的"ext4实现带复选框的多选下拉框"就是一个典型的例子,它涉及到前端开发中的组件设计与实现。这个功能在诸如数据过滤、选项配置等场景中非常常见。下面我们将详细讨论如何利用源码、工具来创建这样的功能。...

    找到的ExtJS实现多选下拉框3个代码

    本文将深入探讨如何在ExtJS中实现多选下拉框功能,这在数据输入和选择场景中非常常见。我们将基于标题中的“3个代码”来讲解不同的实现方法,并结合提供的资源`demo`进行说明。 1. **ExtJS的MultiSelect ComboBox**...

    ext多选下拉列表的全选功能实现

    "ext多选下拉列表的全选功能实现"这个主题聚焦于一个特定的UI组件——ExtJS库中的MultiComboBox,这是一种允许用户多选的下拉列表控件。在实际应用中,全选功能常常被用来快速选择所有选项,极大地提高了用户的操作...

    ext下拉多选组件multicombo

    这个组件扩展了EXTJS的原生下拉框(ComboBox)功能,增加了多选特性,使得用户可以在下拉菜单中选择多个选项。 EXTJS的ComboBox通常是一个单选下拉列表,用户只能从预定义的选项中选择一个。然而,"multicombo"组件...

    EXTJS多选下拉框

    在EXTJS中,多选下拉框(Lovcombo)是一种常见的组件,它结合了选择列表和输入框的功能,允许用户从预定义的选项中选择多个条目。这个lovcombo是lov(List-Value)和combo(组合框)的结合体,提供了丰富的交互性和...

    extjs-Ext.ux.form.LovCombo下拉框

    标题中的"extjs-Ext.ux.form.LovCombo下拉框"表明我们要讨论的是EXTJS中的一个特定组件,它是EXTJS的扩展插件,用于实现具有多选功能的下拉框。这个组件在处理火狐浏览器兼容性问题上做了优化,解决了在火狐浏览器下...

    Ext combobox 下拉多选框带搜索功能

    总的来说,这个定制的Ext ComboBox组件结合了多选和搜索功能,提高了用户在大量选项中的交互效率。理解并实现这样的功能对于开发复杂的Web应用程序是非常有价值的,尤其是在需要用户快速准确选择多项的场景下。通过...

    EXT多选COMBO

    EXT多选COMBO是一种在EXTJS框架中实现的组件,用于创建具有多选功能的下拉框。EXTJS是一款强大的JavaScript UI库,它提供了一系列预定义的组件,帮助开发者构建富客户端应用程序。在这个特定的场景中,“EXT多选...

Global site tag (gtag.js) - Google Analytics