來源: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,而是设置可见与否:

Java代码
  1. reportCategory.on('select',function(combo, record, index){
  2. fs.items.clear(); // 将items清除,希望同步到页面,却不成功。
  3. fs.items.add(reportCategory);
  4. switch (newv) {
  5. case 0:  // 年报表, 选择年
  6. dtYear.setVisible(true);
  7. dtMonth.setVisible(false);
  8. dtDay.setVisible(false);
  9. break;
  10. case 1:  // 月报表, 选择年和月
  11. dtYear.setVisible(true);
  12. dtMonth.setVisible(true);
  13. dtDay.setVisible(false);
  14. break;
  15. case 2// 日报表, 选择具体日期
  16. dtYear.setVisible(false);
  17. dtMonth.setVisible(false);
  18. dtDay.setVisible(true);
  19. break;
  20. }
  21. fs.doLayout();
  22. });
    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的选值,动态地决定组件的显隐?相关推荐

  1. jQuery EasyUI combobox多选及赋值、读取、回显

    2019独角兽企业重金招聘Python工程师标准>>> html代码: <input class="easyui-combobox" name=" ...

  2. 解决Extjs中Combobox显示值和真实值赋值问题

    用过Extjs的朋友相信都知道在Extjs的Combobox组件中是由两个值来组成的.一个是displayField这个是用来显示给我们看 的,而另一个是真正给系统用的valueField,举个例子会 ...

  3. php中多选提交如何获取,php中checkbox值获取,显示,多选值获取

    php教程中checkbox值获取,显示,多选值获取 最简单checkbox获取值代码 checkbox demo checkbox demo demonstrates checkboxes =&qu ...

  4. ExtJs中ComboBox使用之技巧

    在ExtJs中,想要提交ComboBox的Value,需要设置hiddenName:  1 xtype: 'combo',  2                                     ...

  5. kendo ui grid选中行事件,获取combobox选择的值

    背景: 以前用 telerik ui做的grid现在又要换成kendo ui,不过说句实话kendo ui真的比telerik好多,可以说超级升级改头换面.当然用的mvc的辅助方法,以前的teleri ...

  6. ExtJs之数据和ComboBox控件

    一.如何获取数据 在ExtJs中获取数据主要靠下面四个类: Ext.data.DataProxy.Ext.data.Record.Ext.data.DataReader.Store.下面对这三个类做个 ...

  7. extjs中bind_Extjs中常用表单介绍与应用

    目标: 知道表单面板如何创建 了解表单面板中xtype的类型的应用 知道表单面板如何验证,绑定,取值 综合应用表单面板(玩转它) 内容: 首先我们要理解的是FormPanel也是继承panel组件的. ...

  8. 第六课,Extjs中常用表单介绍与应用

    目标: 知道表单面板如何创建 了解表单面板中xtype的类型的应用 知道表单面板如何验证,绑定,取值 综合应用表单面板(玩转它) 内容: 首先我们要理解的是FormPanel也是继承panel组件的. ...

  9. java 多选列表框_快逸报表:填报中的下拉多选列表框

    在快逸报表应用的填报页面中,下拉框是最常见的了.下拉选择框可以简化用户的输入,可以避免用户的错误录入,还可以轻松实现中文与代码的映射关系,可谓用途多多. 可是随着业务的越来越复杂,各种奇怪的需求均可能 ...

最新文章

  1. c++ QT学习笔记
  2. 基于weka实现的神经网络算法实现
  3. iptables 转发oracle端口
  4. android自学笔记《五》——模拟器的使用
  5. ftp可以传输什么类型文件_FTP文件传输工具-ForkLift for Mac
  6. Windows 环境 Jenkins集成构建SonarQube
  7. a=a+b和a+=b的区别
  8. 女同志50岁退休可以早领养老金,55岁退休拿的养老金比较高,哪个更划算?
  9. 创建基于存储过程的数据块
  10. 浅谈NLP算法工程师的核心竞争力
  11. Hadoop报错java.lang.UnsupportedClassVersionError: com/sjt/mr/myjob/MyJob : Unsupported major
  12. Ubuntu Linux 3D桌面完全教程
  13. 300份奖品待领取 | 你的烦恼值钱啦!华为云 DevCloud 年度开发者的烦恼有奖征集火爆开启!...
  14. vue中provide和inject 用法
  15. [luogu P4230]连环病原体
  16. 华里士公式(点火公式)与区间再现公式
  17. volumes是什么意思中文翻译_volume是什么意思_volume的翻译_音标_读音_用法_例句_爱词霸在线词典...
  18. 徐州当铺模型,乡村金融中心的建立
  19. hyperledger cello 0.9.0 项目部署总结
  20. 既生list何生tuple

热门文章

  1. EasyVS 0.3版本发布 -- 给力变换vs编辑器主题
  2. C/C++函数调用的几种方式总结
  3. C# TreeNode的使用方法
  4. 图像语义分割的前世今生
  5. 计算机高职考理论知识,考计算机基础知识理论试题
  6. java c 语言之父_Java之父评价C语言之父:他是一位天才,c语言撑起了一切
  7. 有赞组件vant密码输入框input在微信小程序里隐藏显示密码有问题
  8. mail ru android,mail ru app下载
  9. if test 多条件_if函数进阶篇 嵌套+多条件判断
  10. python打包和添加数据文件_python使用grpc,并打包成python模块