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 相关文章推荐
Lazy Load 延迟加载图片的 jQuery 插件
Feb 06 Javascript
如何让div span等元素能响应键盘事件操作指南
Nov 13 Javascript
jQuery使用技巧简单汇总
Apr 18 Javascript
js判断鼠标同时离开两个div的思路及代码
May 31 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
vue内置指令详解
2018/04/03 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
Python中的进程分支fork和exec详解
2015/04/11 Python
简单谈谈Python中的闭包
2016/11/30 Python
python中的句柄操作的方法示例
2019/06/20 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python连接PostgreSQL过程解析
2020/02/09 Python
django rest framework serializers序列化实例
2020/05/13 Python
精选干货:Java精选笔试题附答案
2014/01/18 面试题
写好自荐信的几个要点
2013/12/26 职场文书
汽车专业人才自我鉴定范文
2013/12/29 职场文书
《胡杨》教学反思
2014/02/16 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
vue实现拖拽交换位置
2022/04/07 Vue.js