ExtJS中如何根据combobox的选值,动态地决定组件的显隐?
來源:http://www.javaeye.com/problems/3168
ExtJS所做的Form,需要根据combobox选择值,来决定后面所显示的组件。办法是动态地加在FormPanel中的items中。
如果选择年报表,则下面的可选的条件输入框只有年。
如果选择日报表,则可选的条件输入框只有日期。
如果选择月报表,则可选的条件输入框有年和月两项。
但下面的代码在实际中,第一次选月报表,显示年和月两项,第二次选年报表,却不会隐藏月这项。
请教下面的代码问题出现在哪?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询选择框</title>
<link rel="stylesheet" type="text/css" href="ExtJS/resources/css/ext-all.css">
<script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ExtJS/ext-all.js"></script>
<script type="text/javascript" src="ExtJS/locale/ext-lang-zh_CN.js"></script>
</head>
<body>
<script type="text/javascript">
Ext.BLANK_IMAGE_URL = 'resources/s.gif';
Ext.onReady(function(){
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';
// 选择框
var reportCategory = new Ext.form.ComboBox({
fieldLabel: '报表类型',
hiddenName:'reportCategory1',
store: new Ext.data.SimpleStore({
fields: ['num', 'name'],
data : [[1,'年报表'],[2,'月报表'],[3,'日报表']]
}),
valueField:'num',
displayField:'name',
typeAhead: true,
mode: 'local',
triggerAction: 'all',
emptyText:'请选择...',
selectOnFocus:true,
width:120
});
var dtYear = new Ext.form.NumberField({
fieldLabel:'年',
name:'dtYear1',
allowBlank:false,
allowDecimals:false,
allowNegative:false,
value:2008,
minValue:2000,
maxValue:2100,
selectOnFocus:true,
validationEvent:false,
width:120
});
var dtMonth = new Ext.form.NumberField({
fieldLabel:'月',
name:'dtMonth1',
allowBlank:false,
allowDecimals:false,
allowNegative:false,
minValue:1,
maxValue:12,
selectOnFocus:true,
validationEvent:false,
width:120
});
var dtDay = new Ext.form.DateField({
fieldLabel: '日期',
name: 'dtDay1',
width:120,
validationEvent:false,
allowBlank:false
});
var fs = new Ext.form.FormPanel({
frame: true,
labelAlign: 'right',
labelWidth: 60,
autoHeight:true,
autoWidth:true,
onSubmit: Ext.emptyFn,
submit: function(){
this.getEl().dom.method='POST';
this.getEl().dom.action='search.jsp';
this.getEl().dom.submit();
},
waitMsgTarget: true,
items: reportCategory
});
fs.addButton('确定', function(){
fs.getForm().submit();
});
reportCategory.on('select',function(combo, record, index){
fs.items.clear(); // 将items清除,希望同步到页面,却不成功。
fs.items.add(reportCategory);
switch (newv) {
case 0: // 年报表, 选择年
fs.items.add(dtYear);
break;
case 1: // 月报表, 选择年和月
fs.items.add(dtYear);
fs.items.add(dtMonth);
break;
case 2: // 日报表, 选择具体日期
fs.items.add(dtDay);
break;
}
fs.doLayout(); // 问题: 此处显示add的,但对原来的clear前的组件并不清除?
});
var window = new Ext.Window({
title:'查询对话框',
width:260,
autoHeight:true,
resizable:false,
layout: 'fit',
plain:true,
closable:false,
border:false,
modal:true,
items: fs
});
window.show();
});
</script>
</body>
</html>
你可以这样子啊,不要清除旧的items,而是设置可见与否:
- reportCategory.on('select',function(combo, record, index){
- fs.items.clear(); // 将items清除,希望同步到页面,却不成功。
- fs.items.add(reportCategory);
- switch (newv) {
- case 0: // 年报表, 选择年
- dtYear.setVisible(true);
- dtMonth.setVisible(false);
- dtDay.setVisible(false);
- break;
- case 1: // 月报表, 选择年和月
- dtYear.setVisible(true);
- dtMonth.setVisible(true);
- dtDay.setVisible(false);
- break;
- case 2: // 日报表, 选择具体日期
- dtYear.setVisible(false);
- dtMonth.setVisible(false);
- dtDay.setVisible(true);
- break;
- }
- fs.doLayout();
- });
reportCategory.on('select',function(combo, record, index){
fs.items.clear(); // 将items清除,希望同步到页面,却不成功。
fs.items.add(reportCategory);
switch (newv) {
case 0: // 年报表, 选择年
dtYear.setVisible(true);
dtMonth.setVisible(false);
dtDay.setVisible(false);
break;
case 1: // 月报表, 选择年和月
dtYear.setVisible(true);
dtMonth.setVisible(true);
dtDay.setVisible(false);
break;
case 2: // 日报表, 选择具体日期
dtYear.setVisible(false);
dtMonth.setVisible(false);
dtDay.setVisible(true);
break;
}
fs.doLayout();
});
ExtJS中如何根据combobox的选值,动态地决定组件的显隐?相关推荐
- jQuery EasyUI combobox多选及赋值、读取、回显
2019独角兽企业重金招聘Python工程师标准>>> html代码: <input class="easyui-combobox" name=" ...
- 解决Extjs中Combobox显示值和真实值赋值问题
用过Extjs的朋友相信都知道在Extjs的Combobox组件中是由两个值来组成的.一个是displayField这个是用来显示给我们看 的,而另一个是真正给系统用的valueField,举个例子会 ...
- php中多选提交如何获取,php中checkbox值获取,显示,多选值获取
php教程中checkbox值获取,显示,多选值获取 最简单checkbox获取值代码 checkbox demo checkbox demo demonstrates checkboxes =&qu ...
- ExtJs中ComboBox使用之技巧
在ExtJs中,想要提交ComboBox的Value,需要设置hiddenName: 1 xtype: 'combo', 2 ...
- kendo ui grid选中行事件,获取combobox选择的值
背景: 以前用 telerik ui做的grid现在又要换成kendo ui,不过说句实话kendo ui真的比telerik好多,可以说超级升级改头换面.当然用的mvc的辅助方法,以前的teleri ...
- ExtJs之数据和ComboBox控件
一.如何获取数据 在ExtJs中获取数据主要靠下面四个类: Ext.data.DataProxy.Ext.data.Record.Ext.data.DataReader.Store.下面对这三个类做个 ...
- extjs中bind_Extjs中常用表单介绍与应用
目标: 知道表单面板如何创建 了解表单面板中xtype的类型的应用 知道表单面板如何验证,绑定,取值 综合应用表单面板(玩转它) 内容: 首先我们要理解的是FormPanel也是继承panel组件的. ...
- 第六课,Extjs中常用表单介绍与应用
目标: 知道表单面板如何创建 了解表单面板中xtype的类型的应用 知道表单面板如何验证,绑定,取值 综合应用表单面板(玩转它) 内容: 首先我们要理解的是FormPanel也是继承panel组件的. ...
- java 多选列表框_快逸报表:填报中的下拉多选列表框
在快逸报表应用的填报页面中,下拉框是最常见的了.下拉选择框可以简化用户的输入,可以避免用户的错误录入,还可以轻松实现中文与代码的映射关系,可谓用途多多. 可是随着业务的越来越复杂,各种奇怪的需求均可能 ...
最新文章
- c++ QT学习笔记
- 基于weka实现的神经网络算法实现
- iptables 转发oracle端口
- android自学笔记《五》——模拟器的使用
- ftp可以传输什么类型文件_FTP文件传输工具-ForkLift for Mac
- Windows 环境 Jenkins集成构建SonarQube
- a=a+b和a+=b的区别
- 女同志50岁退休可以早领养老金,55岁退休拿的养老金比较高,哪个更划算?
- 创建基于存储过程的数据块
- 浅谈NLP算法工程师的核心竞争力
- Hadoop报错java.lang.UnsupportedClassVersionError: com/sjt/mr/myjob/MyJob : Unsupported major
- Ubuntu Linux 3D桌面完全教程
- 300份奖品待领取 | 你的烦恼值钱啦!华为云 DevCloud 年度开发者的烦恼有奖征集火爆开启!...
- vue中provide和inject 用法
- [luogu P4230]连环病原体
- 华里士公式(点火公式)与区间再现公式
- volumes是什么意思中文翻译_volume是什么意思_volume的翻译_音标_读音_用法_例句_爱词霸在线词典...
- 徐州当铺模型,乡村金融中心的建立
- hyperledger cello 0.9.0 项目部署总结
- 既生list何生tuple
热门文章
- EasyVS 0.3版本发布 -- 给力变换vs编辑器主题
- C/C++函数调用的几种方式总结
- C# TreeNode的使用方法
- 图像语义分割的前世今生
- 计算机高职考理论知识,考计算机基础知识理论试题
- java c 语言之父_Java之父评价C语言之父:他是一位天才,c语言撑起了一切
- 有赞组件vant密码输入框input在微信小程序里隐藏显示密码有问题
- mail ru android,mail ru app下载
- if test 多条件_if函数进阶篇 嵌套+多条件判断
- python打包和添加数据文件_python使用grpc,并打包成python模块