`
huiqinbo
  • 浏览: 344633 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

无废话ExtJs 教程十一[下拉列表联动:Combobox_Two]

 
阅读更多

不管是几级下拉列表的联动实现本质上都是根据某个下拉列表的变化,去动态加载其他下拉列表,如:省、市、地区。

当我们监听到省变化时,向service端发送省的编号,service端根据收到的"省"编号到数据库中查询该省所对应的市信息,

地区同理,抓住这一点,我们只需要监听 combobox 的 select 事件并在其中实现逻辑即可。

1.代码如下:

复制代码
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4     <title></title>
  5     <!--ExtJs框架开始-->
  6     <script type="text/javascript" src="/Ext/adapter/ext/ext-base.js"></script>
  7     <script type="text/javascript" src="/Ext/ext-all.js"></script>
  8     <script src="/Ext/src/locale/ext-lang-zh_CN.js" type="text/javascript"></script>
  9     <link rel="stylesheet" type="text/css" href="/Ext/resources/css/ext-all.css" />
 10     <!--ExtJs框架结束-->
 11     <script type="text/javascript">
 12         Ext.onReady(function () {
 13             //初始化标签中的Ext:Qtip属性。
 14             Ext.QuickTips.init();
 15             Ext.form.Field.prototype.msgTarget = 'side';
 16 
 17             //----------------------下拉列表开始----------------------//
 18             //创建市数据源
 19             var combocitystore = new Ext.data.Store({
 20                 //设定读取的地址
 21                 proxy: new Ext.data.HttpProxy({ url: '/App_Ashx/Demo/City.ashx' }),
 22                 //设定读取的格式    
 23                 reader: new Ext.data.JsonReader({ root: 'data' },
 24                  [{ name: 'id' }, { name: 'name'}])
 25             });
 26             //创建区数据源
 27             var comboareastore = new Ext.data.Store({
 28                 //设定读取的地址
 29                 proxy: new Ext.data.HttpProxy({ url: '/App_Ashx/Demo/Area.ashx' }),
 30                 reader: new Ext.data.JsonReader({ root: 'data' },
 31                  [{ name: 'id' }, { name: 'name'}])
 32             });
 33             //创建市Combobox
 34             var comboboxcity = new Ext.form.ComboBox({
 35                 id: 'comboboxcity',
 36                 fieldLabel: '市',
 37                 width: 120,
 38                 store: combocitystore,
 39                 displayField: 'name',
 40                 valueField: 'id',
 41                 triggerAction: 'all',
 42                 emptyText: '请选择...',
 43                 allowBlank: false,
 44                 blankText: '请选择市',
 45                 editable: false,
 46                 mode: 'local', //该属性和以下方法为了兼容ie8
 47                 listeners: {
 48                     'render': function () {
 49                         combocitystore.load();
 50                     }
 51                 }
 52             });
 53 
 54             //创建区Combobox
 55             var comboareacity = new Ext.form.ComboBox({
 56                 fieldLabel: '区',
 57                 width: 120,
 58                 store: comboareastore,
 59                 displayField: 'name',
 60                 valueField: 'id',
 61                 triggerAction: 'all',
 62                 emptyText: '请选择...',
 63                 allowBlank: false,
 64                 blankText: '请选择区',
 65                 editable: false
 66             });
 67             //联动的实现
 68             comboboxcity.on('select', function () {
 69                 comboareastore.baseParams.id = comboboxcity.getValue();
 70                 comboareacity.setValue('');
 71                 comboareastore.load();
 72             })
 73             //----------------------下拉列表结束----------------------//
 74             //表单
 75             var form = new Ext.form.FormPanel({
 76                 frame: true,
 77                 title: '表单标题',
 78                 style: 'margin:10px',
 79                 items: [comboboxcity, comboareacity]
 80             });
 81             //窗体
 82             var win = new Ext.Window({
 83                 title: '窗口',
 84                 width: 476,
 85                 height: 374,
 86                 resizable: true,
 87                 modal: true,
 88                 closable: true,
 89                 maximizable: true,
 90                 minimizable: true,
 91                 buttonAlign: 'center',
 92                 items: form
 93             });
 94             win.show();
 95         });
 96     </script>
 97 </head>
 98 <body>
 99     <!--
100 说明:
101 (1)var combocitystore = new Ext.data.Store():创建一个新的数据源。
102 (2)proxy: new Ext.data.HttpProxy({ url: '/App_Ashx/Demo/City.ashx' }):数据代理为http代理,地址为/App_Ashx/Demo/City.ashx。
103 (3)reader: new Ext.data.JsonReader({ root: 'data' },[{ name: 'id' }, { name: 'name'}]):读取json返回值根节点为data,对象列为id和name。
104     这里要结合client与service观察,我在service端的输出如下:{data:[{id:1,name:'北京'},{id:2,name:'上海'}]}
105 (4)comboboxcity.on('select', function () {}:市选择变化时触发事件。
106 (5)comboareastore.baseParams.id = comboboxcity.getValue():注意,前面的comboareastore是区的数据源,
107     当市变化时,我们给区的数据源加上个向service端发送的参数。
108 (6)comboareacity.setValue(''):把区的下拉列表设置为空,由于非空验证,Ext会提示用户“请选择区”,这个地方也可以把加载出来的第一个区
109     显示在区的下拉列表中,具体请自行实现吧。        
110 (7)comboareastore.load():区的数据源重新加载。
111 -->
112 </body>
113 </html>
复制代码

 

其中与service交互用到两个.net 一般处理程序文件,源码如下:
(1)/App_Ashx/Demo/City.ashx

复制代码
 1 using System.Web;
 2 
 3 namespace HZYT.ExtJs.WebSite.App_Ashx.Demo
 4 {
 5     public class City : IHttpHandler
 6     {
 7         public void ProcessRequest(HttpContext context)
 8         {
 9             context.Response.Write("{data:[{id:1,name:'北京'},{id:2,name:'上海'}]}");
10         }
11 
12         public bool IsReusable
13         {
14             get
15             {
16                 return false;
17             }
18         }
19     }
20 }
复制代码

(2)/App_Ashx/Demo/Area.ashx

复制代码
 1 using System.Web;
 2 
 3 namespace HZYT.ExtJs.WebSite.App_Ashx.Demo
 4 {
 5     public class Area : IHttpHandler
 6     {
 7         public void ProcessRequest(HttpContext context)
 8         {
 9             //接收Client端传来的参数,交根据条件返回
10             if (context.Request.Form["id"].ToString() == "1")
11             {
12                 context.Response.Write("{data:[{id:1,name:'东城区'},{id:2,name:'西城区'},{id:2,name:'海淀区'}]}");
13             }
14             else
15             {
16                 context.Response.Write("{data:[{id:1,name:'杨浦区'},{id:2,name:'虹口区'},{id:2,name:'闸北区'}]}");
17             }
18         }
19 
20         public bool IsReusable
21         {
22             get
23             {
24                 return false;
25             }
26         }
27     }
28 }
复制代码

2.效果如下:

 

分享到:
评论

相关推荐

    无废话ExtJs 教程十[下拉列表:Combobox]

    在ExtJS中,下拉列表(Combobox)是常见的组件之一,它结合了输入框和下拉菜单的功能,允许用户进行选择或自由输入。本教程将深入探讨ExtJS中的Combobox组件,包括其基本用法、配置选项、事件处理和自定义功能。 1....

    Extjs学习笔记(-):ComboBox联动

    ComboBox是EXTJS中的Select字段,通常包含一个输入框和一个下拉列表。它的核心特性包括可搜索、可分页、可远程加载数据等。联动效果的实现主要涉及以下几个关键点: 1. **配置项**:在创建ComboBox时,我们需要定义...

    无废话ExtJs 系列教程十八[继承:Extend]

    在"无废话ExtJS系列教程十八[继承:Extend]"中,我们主要关注的是ExtJS中的类继承机制,这是一个核心特性,它允许开发者创建可复用和可扩展的组件结构。在JavaScript中,继承是通过原型链实现的,而在ExtJS中,它被...

    ExtJS下拉列表树控件1

    参考提供的博客文章"无废话ExtJs 入门教程十二[下拉列表联动:Combobox_Two]",作者李林峰详细解释了如何配置和使用这类控件。文章中可能涵盖了创建两个联动的下拉列表树控件的实例,通过选择一个列表中的项目来动态...

    Extjs6 下拉列表

    在ExtJS6中,下拉列表(ComboBox)是一种常见的组件,用于提供用户可以选择的预定义选项。这个框架提供了丰富的功能和定制性,使得下拉列表不仅能够简单地显示一组静态选项,还能与数据源进行联动,展示动态加载的...

    无废话ExtJs 系统教程十四[列表:GridPanel]

    在"无废话ExtJS 系统教程十四[列表:GridPanel]"中,我们将会深入探讨如何有效地使用GridPanel来创建高效的、功能丰富的数据列表。 GridPanel是ExtJS中的核心组件之一,它允许用户以表格形式展示大量数据,并支持...

    extjs的ComboBox 2级联动

    Store用于存储选项数据,displayField定义了在下拉列表中显示的字段,而valueField则标识选中项的唯一标识。 在实现二级联动时,通常会涉及两个ComboBox,一个用于一级选择(如省份),另一个用于二级选择(如城市...

    无废话ExtJs 系列教程十五[树:TreePanel]

    《无废话ExtJs系列教程十五:树:TreePanel》 ExtJs是一个强大的JavaScript库,用于构建富客户端Web应用。在本教程中,我们将深入探讨一个重要的组件——TreePanel,它是ExtJs用来展示层次结构数据的工具,常用于...

    ExtJS Combobox二级联动列子

    ExtJS的Combobox组件是一种常见的数据输入控件,它提供了下拉列表的功能,用户可以选择列表中的一个选项或者在输入框中自由输入。在实际应用中,我们常常会遇到需要实现二级甚至多级联动的场景,这通常是由于数据的...

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

    在给定的标题“Ext ComboBox 下拉多选框带搜索功能”中,我们关注的是一个特别的ComboBox实现,它不仅允许用户从下拉列表中选择多个选项,还具备搜索功能,使得用户可以更高效地找到他们想要的选择项。 ComboBox在...

    extjs4 ComboBox 点击下拉框 出现grid效果

    然而,根据你的标题和描述,你似乎遇到了一个特别的需求,即当你点击ComboBox的下拉框时,希望出现一个Grid组件,而不是默认的下拉列表。 ComboBox的默认行为是弹出一个包含选项的列表,而你想要实现的是当用户点击...

    extjs4 下拉菜单树 combobox+tree 支持单选多选

    - ComboBox是EXTJS中的一个基础组件,它是一个下拉列表,用户可以输入文本或从下拉列表中选择。 - TreePanel则是EXTJS用来显示树形结构数据的组件,它允许用户展开、折叠节点,以及选择节点。 2. **下拉菜单树...

    Extjs 轻松实现下拉框联动

    最近小弟做了Extjs实现实现下拉框联动的效果,参考了好久才学会,闲下来发一个简单的例子。。呵呵

    extjs 自动补全 模拟combobox

    Combobox是EXTJS中的一个下拉选择框,它可以显示一个下拉列表供用户选择,同时也可以配合自动补全功能。 首先,让我们理解EXTJS的Combobox组件。Combobox由两部分组成:一个文本输入框和一个下拉列表。文本输入框...

    Extjs4下拉菜单ComboBox中用Grid显示通用控件

    - `ComboBox` 是EXTJS中的一个基础组件,它提供了文本输入框和下拉列表的功能。 - 用户可以输入文本,也可以点击下拉箭头查看预定义的选项列表。 - `ComboBox` 的数据通常通过配置 `store` 属性来设置,`store` ...

    无废话ExtJs 教程十二[员工信息表Demo:AddUser]

    【标题】"无废话ExtJs 教程十二[员工信息表Demo:AddUser]"是一个针对初学者和进阶者设计的教程,旨在帮助他们更好地理解和应用ExtJS框架创建员工信息管理系统的添加用户功能。在本教程中,我们将深入探讨如何使用...

    无废话ExtJs 系统教程十九[动态复选框:RemoteCheckboxGroup]

    总之,"无废话ExtJs 系统教程十九[动态复选框:RemoteCheckboxGroup]"是一个帮助开发者掌握如何在ExtJS应用中实现动态复选框组件的资源。通过学习和实践,你可以创建出更加灵活和高效的用户界面,同时利用源码和工具...

    ExtJS下拉列表树控件

    在ExtJS中,下拉列表树控件(ComboBox Tree)是常见的组件之一,它结合了下拉列表和树结构,提供了更丰富的用户界面。这个控件允许用户从一个层级化的数据结构中进行选择,非常适合于展示有层次关系的数据。 在创建...

    extjs表单中的下拉框(comobobox)手动添加空选项

    其中一个常用的组件就是`ComboBox`(组合框),它可以用来创建一个包含可选择项目的下拉列表。在某些场景下,我们可能需要在`ComboBox`中手动添加一个空选项或者默认选项,例如“所有”、“请选择”等,以便让用户...

Global site tag (gtag.js) - Google Analytics