`
lzqustc
  • 浏览: 211123 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Ajax级联选择框:以中国的省市地区三级联动选择为例

阅读更多

首先:确定数据库的设计,下面将省市地区数据以如下方式存入数据库的cities表(看附件):
+--------+--------------+
| id     | cname       |
+--------+--------------+
| 110000 | 北京市       |         第1级
| 110100 | 北京市       |         第2级
| 110101 | 东城区       |         第3级
| 110102 | 西城区       |         第3级
+--------+--------------+

那么,要取所有省(直辖市)的数据,可通过下面语句:
mysql> select * from cities where (id mod 10000 = 0 );

取某个省(直辖市)的所有市的数据,可通过下面语句:
mysql> select * from cities where (id mod 100 = 0 ) and (id div 10000 = #{province_id} div 10000 )      
      and (id != #{province_id});

取第三级数据:
mysql>  select * from cities where(id div 100 = #{city_id} div 100 )  and  (id != #{city_id});


下面开始写rails 应用:步骤如下
①、ruby script/generate scaffold  city  cname:string

②、写取所有省(直辖市)的数据的函数
class City < ActiveRecord::Base   
      
  def self.get_province_select_options  
     City.find_by_sql("select * from cities where (id mod 10000 =0 )").collect { |row|  [row.cname,row.id] }.insert(0,["--请选择--",0])
  end
end

③、假设这个省市地区级联应用是出现在公司(Company)的视图上,而且companies表里有相应的字段province_id、city_id、area_id。
首先在./views/layouts/companies.html.erb
添加<%= javascript_include_tag 'prototype' %> 以便定义Ajax请求,

接着就可以修改视图了Company的new/eidt视图如下:
%table
   %tr
      %td
         =f.select(:province_id, City.get_province_select_options,{},
            "onchange" => remote_function(
                :with => " 'province_id = '+ value + '&partial = select_city' ",
                :update =>"cityid", :complete => "Element.hide('areaid') ",
                :url =>{:controller => :cities, :action => :index_city}  ),
           :style=>"width:150px")
      %td
        %div{:id=>'cityid'}
      %td          
        %div{:id=>'areaid'}   
注意:对于haml模板,上面的分行是会出错的,f.select()最好写成一行。


接着就要相应修改:controller、:action、:partial
④、修改CitiesController,主要是定义 action ——index_city

class CitiesController < ApplicationController

   def index_city  
     if params[:province_id]
       province_id  = params[:province_id]
       @cities = City.find_by_sql("select * from cities where (id mod 100 =0 )and (id div 10000 = #{province_id} div 10000 ) 

      and (id != #{province_id})").collect {|c| [c.cname, c.id]}.insert(0,["--请选择--",0])             
     else
       @cities = City.find(:all).collect {|c| [c.cname, c.id]}   
     end
     respond_to do |format|     
       format.html { render :partial => params[:partial]}     
       format.xml { render: xml => @cities.to_xml }  
     end
   end     
end

⑤、写partial—— select_city, 在./views/cities新建一个

_select_city.html.erb,内容如下:
<%= select(:company, :city_id, @cities,{},
  "onchange" => remote_function( :with => "'city_id='+value+ '&partial = select_area' ",
       :update => "areaid",:complete => "Element.show('areaid')",
       :url =>{:controller => :cities,:action => :index_area} ),
        :style=>"width:160px")
%>

同理,要写一个action —— index_area,和一个partial ——select_area
class CitiesController < ApplicationController

   def index_area  
     if params[:city_id]
       city_id  = params[:city_id]
       @areas = City.find_by_sql("select * from cities where (id mod 100 =0 )
               and (id div 10000 = #{city_id } div 10000 )  and
               (id != #{city_id })").collect {|c| [c.cname, c.id]}.insert(0,["--请选择--",0])             
     else
       @areas = City.find(:all).collect {|c| [c.cname, c.id]}   
     end
     respond_to do |format|     
       format.html { render :partial => params[:partial]}     
       format.xml { render: xml => @areas.to_xml }  
     end
   end     
end

在./views/cities新建一个_select_area.html.erb,内容如下:
<%= select(:company, :area_id, @areas,{},:style=>"width:150px")%>

 

 

OK, 在Compnay的视图中使用这个三级联动菜单,已经没问题了。

 

分享到:
评论

相关推荐

    省市县三级联动.zip

    在实际应用中,省市县三级联动的实现还可以结合前端组件库,如Element UI、Ant Design等,它们提供了现成的级联选择器组件,简化了开发过程。同时,为了优化用户体验,还可以加入搜索功能,让用户可以快速找到目标...

    Bootstrap实现省市区三级联动(亲测可用)

    ### 知识点一:Bootstrap框架及其在省市区三级联动中的应用 Bootstrap是一套流行的前端框架,由Twitter的设计师和开发人员开发。它基于HTML、CSS和JavaScript,旨在简化网站的响应式和移动设备开发。Bootstrap提供...

    省市区三级联动 html5+jQuery兼容移动端

    在地理信息中,通常以省、市、区(县)为三级结构,三级联动就是在用户选择一级(省)时,二级(市)的选项自动更新,同样,当用户选择二级(市)时,三级(区)的选项也会随之更新。这种实时更新的交互方式可以极大...

    HTML移动端省市区三级联动,完美适配Android和IOS

    HTML移动端省市区三级联动是一种常见的前端开发技术,用于在移动设备上实现省、市、区的下拉选择功能。这个技术对于构建具有地理定位服务的Web应用尤其重要,如在线购物、生活服务类应用等。在给定的场景中,我们有...

    jQuery+ajax实现三级级联

    在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的下拉菜单系统,这在数据筛选和表单填写中十分常见,如地区选择、部门分类等场景。 首先,jQuery是一个轻量级...

    Jquery实现省市区三级联动多选.zip

    "Jquery实现省市区三级联动多选"是一个典型的前端技术应用,它解决了传统二级联动或三级联动一对一模式的问题,引入了多选功能,使得用户在选择省市区时可以有更大的自由度。 一、jQuery简介 jQuery是一个快速、...

    全国地区级联数据.五级级联,省市区街道社区

    全国地区级联数据是用于构建具有五级层次结构的下拉选择框或级联菜单的数据库资源,这种数据通常在Web开发中用于实现用户输入地址时的智能提示功能。五级级联指的是省级、市级、区县级、街道级以及社区级的逐级展开...

    echart3 地图数据省市区三级级联demo

    在"echart3 地图数据省市区三级级联demo"中,开发者已经实现了一个省份-城市-区县的三级联动效果,用户可以通过选择省份来筛选对应的城市,进一步选择城市后,再显示相应的区县。这种功能在地理分布、销售统计等场景...

    ajax sturts2级联选择框

    本话题主要关注如何利用Ajax和Struts2来实现级联选择框的功能,这是一种常见的需求,特别是在处理关联数据时,如地区、城市、省份等具有层次关系的数据。 级联选择框是一种交互式的UI元素,用户在选择一个选项后,...

    Java三级级联,省份,市区,地区

    数据库中的省份、市区、地区的编码可能设计为整型或字符串类型,每级有一个唯一的编码,以便于管理和关联。 为了实现级联效果,数据库需要维护一个有序的结构,例如,每个地区都关联到其上级市区,每个市区又关联到...

    省市区县三级联动数据.zip

    在IT行业中,"省市区县三级联动数据"通常是指一种用于构建地理信息选择功能的数据结构。这种功能常见于各类Web应用或移动应用中,比如地址填写、物流配送、数据分析等场景。用户在输入地址时,可以依次从省级、市级...

    layui省市区三级联动城市选择

    总的来说,“layui省市区三级联动城市选择”功能结合了layui的UI组件、jQuery的事件处理和动态加载数据的能力,为用户提供了一个便捷、直观的城市选择体验。在实际项目中,这种功能可以大大提高用户体验,简化地址...

    全球国家,省份,城市 三级联动

    在IT领域,"三级联动"是一种常见的用户界面交互设计,主要应用于下拉选择框或级联菜单中。这种设计通常涉及到三个层次的数据关联,如在本例中的“全球国家,省份,城市”,用户在选择一个国家后,省份的选项会根据所...

    js 省市县三级联动,特别好用

    在JavaScript编程中,"省市县三级联动"是一个常见的功能需求,尤其在开发涉及地理信息的Web应用时。这种联动效果通常用于地址选择,用户在选择省份后,市、县(区)的下拉框会自动更新,显示与所选省份对应的选项。...

    ASP.NET MVC省市县三级级联(JQuery)

    在这个特定的项目中,"省市县三级级联"是指在一个Web应用中实现省、市、县(或区)的三级联动选择功能,这在地址输入或区域划分等场景中非常常见。这个功能的实现通常涉及到前端的交互和后端的数据处理。 前端部分...

    Select2实现全国省市区三级联动下拉菜单

    本教程将详细讲解如何利用`Select2`实现全国省市区的三级联动下拉菜单。 首先,我们需要理解`Select2`的核心功能。`Select2`可以将普通的HTML选择框转化为功能强大的输入控件,支持搜索、多选、远程数据加载等多种...

    js树状地区三级级联带复选框

    它支持多选、级联选择以及自定义数据源等功能,非常适合实现“js树状地区三级级联带复选框”的需求。在JSTree中,你可以配置各种插件和设置,如checkbox插件来启用复选框,配置json_data或ajax数据源来动态加载地区...

    省市区镇四级联动

    在中国的地理信息系统中,"省市区镇四级联动"是一种常见的数据选择方式,尤其在网站开发、移动应用或者后台管理系统中,用于用户输入地址时提供便捷的选择。这种联动机制基于中国的行政区域划分,包括省份(省级行政...

    jqueryajax地区省市镇三级联动

    在网页开发中,"jQuery AJAX 地区省市镇三级联动"是一种常见的功能,它使得用户在选择省份时,相应的城市和乡镇会动态更新,提供便捷的下拉菜单选择体验。这个功能广泛应用于地址输入、物流配送等场景。下面将详细...

Global site tag (gtag.js) - Google Analytics