Extjs4.0 ComboBox如何实现三级联动


Posted in Javascript onMay 11, 2016

很多网友在问,Extjs4.0 ComboBox如何实现,好在之前用3.x实现过一个三级联动,如今用Extjs4.0来实现同样的联动效果。其中注意的一点就是,3.x中的model:'local'在Extjs4.0中用queryMode: 'local'来表示,而且在3.x中Load数据时用reload,但是在extjs4.0中要使用load来获取数据。如下图:

Extjs4.0 ComboBox如何实现三级联动

代码部分

先看HTML代码:

<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MHZG.NET-城市三级联动实例</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<script type="text/javascript" src="../../bootstrap.js"></script>
<script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript" src="combobox.js"></script>
</head>

<body>
</body>
</html>

简单的很,就是加载了基本的CSS文件和JS文件,并且加载自定义的combobox.js文件。

combobox.js:

Ext.require('Ext.*');
Ext.onReady(function(){
 //定义ComboBox模型
 Ext.define('State', {
   extend: 'Ext.data.Model',
   fields: [
     {type: 'int', name: 'id'},
     {type: 'string', name: 'cname'}
   ]
 });
 
 //加载省数据源
 var store = Ext.create('Ext.data.Store', {
   model: 'State',
   proxy: {
     type: 'ajax',
     url: 'city.asp?act=sheng&n='+new Date().getTime()+''
   },
   autoLoad: true,
   remoteSort:true
 });
 //加载市数据源
 var store1 = Ext.create('Ext.data.Store', {
   model: 'State',
   proxy: {
     type: 'ajax',
     url: 'city.asp?act=shi&n='+new Date().getTime()+''
   },
   autoLoad: false,
   remoteSort:true
 });
 //加载区数据源
 var store2 = Ext.create('Ext.data.Store', {
   model: 'State',
   proxy: {
     type: 'ajax',
     url: 'city.asp?act=qu&n='+new Date().getTime()+''
   },
   autoLoad: false,
   remoteSort:true
 });
  
 
 
 Ext.create("Ext.panel.Panel",{
  renderTo: document.body,
  width:290,
  height:220,
  title:"城市三级联动",
  plain: true,
  margin:'30 10 0 80',
  bodyStyle: "padding: 45px 15px 15px 15px;",
  defaults :{
    autoScroll: true,
    bodyPadding: 10
  },
  items:[{
    xtype:"combo",
    name:'sheng',
    id : 'sheng',
    fieldLabel:'选择省',
    displayField:'cname',
    valueField:'id',
    store:store,
    triggerAction:'all',
    queryMode: 'local', 
    selectOnFocus:true,
    forceSelection: true,
    allowBlank:false,
    editable: true,
    emptyText:'请选择省',
    blankText : '请选择省',
    listeners:{  
      select:function(combo, record,index){
         try{
           //userAdd = record.data.name;
           var parent=Ext.getCmp('shi');
           var parent1 = Ext.getCmp("qu");
           parent.clearValue();
           parent1.clearValue();
           parent.store.load({params:{param:this.value}});
         }
         catch(ex){
           Ext.MessageBox.alert("错误","数据加载失败。");
         }
      }
    }
    },
    {
    xtype:"combo",
    name:'shi',
    id : 'shi',
    fieldLabel:'选择市',
    displayField:'cname',
    valueField:'id',
    store:store1,
    triggerAction:'all',
    queryMode: 'local',
    selectOnFocus:true,
    forceSelection: true,
    allowBlank:false,
    editable: true,
    emptyText:'请选择市',
    blankText : '请选择市',
    listeners:{  
      select:function(combo, record,index){
         try{
           //userAdd = record.data.name;
           var parent = Ext.getCmp("qu");
           parent.clearValue();
           parent.store.load({params:{param:this.value}});
         }
         catch(ex){
           Ext.MessageBox.alert("错误","数据加载失败。");
         }
      }
    }
    },
    {
    xtype:"combo",
    name:'qu',
    id : 'qu',
    fieldLabel:'选择区',
    displayField:'cname',
    valueField:'id',
    store:store2,
    triggerAction:'all',
    queryMode: 'local',
    selectOnFocus:true,
    forceSelection: true,
    allowBlank:false,
    editable: true,
    emptyText:'请选择区',
    blankText : '请选择区',
    }
  ]
 })
});

上述代码中,如果在ComboBox直接定义store数据源,会出现这样一种情况,那就是当选择完第一个省,点击第二个市的时候,会闪一下,再点击,才会出现市的数据。那么要解决这样的情况,那么必须先要定义好省、市、区的数据源。那么再点击的时候,就不会出现上述情况了。

代码中,使用store为省的数据,设置其autoLoad为true,那么页面第一次加载的时候,就会自动加载省的数据,然后给省和市添加了监听select,作用在于当点击省的时候,要清空市和区的数据,并根据当前选定的值去加载对应的数据到市的数据源中。当然store1和store2原理是一样的。

最后,服务端要根据传的值进行数据检索及返回正确数据,这里没有从数据库中查询数据,而只是简单的写了一些测试代码,相信extjs代码没有任何的问题了,那么服务端返回数据,就不是一件很重要的事情了。

City.asp:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
  Response.ContentType = "text/html"
  Response.Charset = "UTF-8"
%>
<%
  Dim act:act = Request("act")
  Dim param : param = Request("param")
  If act = "sheng" Then
    Response.Write("[")
    Response.Write("{""cname"":""北京市"",""id"":""110000""},")
    Response.Write("{""cname"":""内蒙古自治区"",""id"":""150000""}")
    Response.Write("]")
  End If
  If act = "shi" Then
    If param = "110000" Then
      Response.Write("[")
      Response.Write("{""cname"":""市辖区"",""id"":""110100""},")
      Response.Write("{""cname"":""市辖县"",""id"":""110200""}")
      Response.Write("]")
    ElseIf param = "150000" Then
      Response.Write("[")
      Response.Write("{""cname"":""呼和浩特市"",""id"":""150100""},")
      Response.Write("{""cname"":""包头市"",""id"":""150200""}")
      Response.Write("]")
    End If
  End If
  If act = "qu" Then
    If param = "110100" Then
      Response.Write("[")
      Response.Write("{""cname"":""朝阳区"",""id"":""110101""},")
      Response.Write("{""cname"":""昌平区"",""id"":""110102""}")
      Response.Write("]")
    ElseIf param = "110200" Then
      Response.Write("[")
      Response.Write("{""cname"":""密云县"",""id"":""110201""},")
      Response.Write("{""cname"":""房山县"",""id"":""110202""}")
      Response.Write("]")
    ElseIf param = "150100" Then
      Response.Write("[")
      Response.Write("{""cname"":""回民区"",""id"":""150101""},")
      Response.Write("{""cname"":""新城区"",""id"":""150102""}")
      Response.Write("]")
    ElseIf param = "150200" Then
      Response.Write("[")
      Response.Write("{""cname"":""青山区"",""id"":""150201""},")
      Response.Write("{""cname"":""东河区"",""id"":""150202""}")
      Response.Write("]")
    End If
  End If
%>

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JQuery 遮罩层实现(mask)实现代码
Jan 09 Javascript
Javascript中call的两种用法实例
Dec 13 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
Feb 18 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
JS中作用域和变量提升(hoisting)的深入理解
Oct 31 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
JS图片预加载插件详解
Jun 21 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
Aug 28 Javascript
react koa rematch 如何打造一套服务端渲染架子
Jun 26 Javascript
javascript简单判断输入内容是否合法的方法
May 11 #Javascript
解析JavaScript面向对象概念中的Object类型与作用域
May 10 #Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
May 10 #Javascript
JavaScript中的原型prototype完全解析
May 10 #Javascript
简单解析JavaScript中的__proto__属性
May 10 #Javascript
Web Uploader文件上传插件使用详解
May 10 #Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 #Javascript
You might like
php木马攻击防御之道
2008/03/24 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
旷课检讨书大全
2014/01/21 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
全国文明单位申报材料
2014/05/31 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
《搭石》教学反思
2016/02/18 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书